2013-05-09 85 views
1

我們管理的網站地圖(sitemap.org)文件的範圍爲500k個鏈接,這些鏈接經常變化,我們希望動態生成它們,不用擔心,我們會緩存一段時間的結果,但這是我遇到問題的mod_rewrite規則。複雜網站地圖+索引xml文件的Apache mod_rewrite規則

正如我們有超過50k鏈接,我們需要使用站點地圖索引文件。站點地圖和索引文件都將重定向到sitemap.php文件,該文件將使用文件名模式($_SERVER['REQUEST_URI'])來確定要顯示的列表。

的文件名模式將如下所示:

www.domain.com/sitemap.index.xml 
www.domain.com/sitemap.some_theme.xml 
www.domain.com/sitemap.different_theme.xml 

mod_rewrite的涵蓋了我們的Web應用程序,以及所以我會包括所有的以防萬一別的東西可能會改寫或衝突與我」米試圖完成:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^sitemap\.(.*)\.xml$ sitemap.php/ [NC,L] 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php/ [NC,L] 
errordocument 404/

我已經插入了網站地圖專門的線路是:

RewriteRule ^sitemap\.(.*)\.xml$ sitemap.php/ [NC,L] 

否則其他一切都是您的標準Web應用程序的東西。

---編輯---

好了,這麼多撓頭之後,我發現這個問題。首先,我稍微簡單,因爲我並不需要捕捉模式匹配,只有積極應對的規則,新的規則是:

RewriteRule ^sitemap.*\.xml$ sitemap.php [NC,L] 

所以起腳被簡單地交換了它的秩序和下面的一個:

RewriteRule ^.*$ - [NC,L] 
RewriteRule ^sitemap.*\.xml$ sitemap.php [NC,L] 

我現在要離開這個問題了,因爲我想知道爲什麼這會產生變化。謝謝。

回答

1

這條規則是多餘的,應予刪除:

RewriteRule ^.*$ - [NC,L] 

修改代碼以這樣:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

ErrorDocument 404/

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l 
RewriteRule ^/?sitemap\. /sitemap.php [NC,L] 
RewriteRule^/index.php [L] 
+0

對不起@anubhava,我是編輯我的問題,而答案就在這裏有點比我們需要的更多,最重要的是因爲我們的指令位於虛擬主機文件中,而不是'.htaccess'。之前的編輯器在問題中添加了「.htaccess」標籤。我將探討刪除'-d'條件和'^。* $'規則的影響,但只要不會對應用程序的其他部分產生負面影響,更簡單的規則集就會很好。 – oucil 2013-05-09 14:36:45

+0

好的,我上面做了一些小的編輯,以確保這個anser也可以在httpd.conf中工作。 – anubhava 2013-05-09 14:57:02