我们管理具有 500k 链接范围内的站点地图 (sitemap.org) 文件,这些链接经常变化,我们希望动态生成它们,别担心,我们会将结果缓存一段时间,但这是 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]
我将暂时保留这个问题,因为我想知道为什么这会有所作为。谢谢。