Apache mod_rewrite规则复杂的sitemap +索引xml文件



我们管理sitemap (sitemap.org)文件,有在500k的范围内的链接,这是经常变化,我们要动态生成它们,不要担心,我们将缓存的结果一段时间,但这是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应用程序。

—EDIT—

好吧,在绞尽脑汁之后,我找到了问题所在。首先,我稍微简化了规则,因为我不需要捕获模式匹配,只需要一个积极的响应,新规则是:

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]

最新更新