1

我们管理具有 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]

我将暂时保留这个问题,因为我想知道为什么这会有所作为。谢谢。

4

1 回答 1

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]
于 2013-05-09T14:04:06.793 回答