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