我們管理的網站地圖(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]
我現在要離開這個問題了,因爲我想知道爲什麼這會產生變化。謝謝。
對不起@anubhava,我是編輯我的問題,而答案就在這裏有點比我們需要的更多,最重要的是因爲我們的指令位於虛擬主機文件中,而不是'.htaccess'。之前的編輯器在問題中添加了「.htaccess」標籤。我將探討刪除'-d'條件和'^。* $'規則的影響,但只要不會對應用程序的其他部分產生負面影響,更簡單的規則集就會很好。 – oucil 2013-05-09 14:36:45
好的,我上面做了一些小的編輯,以確保這個anser也可以在httpd.conf中工作。 – anubhava 2013-05-09 14:57:02