簡體   English   中英

適用於復雜站點地圖+索引xml文件的Apache mod_rewrite規則

[英]Apache mod_rewrite rule for complex sitemap + index xml files

我們管理的站點地圖(sitemap.org)文件的鏈接范圍為50萬個,這些文件的更改頻率經常變化,因此我們希望動態生成它們,不用擔心,我們會將結果緩存一段時間,但這是mod_rewrite規則我有問題。

由於我們有5萬多個鏈接,因此我們需要使用站點地圖索引文件。 站點地圖和索引文件都將重定向到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]

我現在暫時不提問題,因為我想知道為什么會有所作為。 謝謝。

此規則是多余的,應刪除:

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM