我们管理的网站地图(sitemap.org)文件的范围为500k个链接,这些链接经常变化,我们希望动态生成它们,不用担心,我们会缓存一段时间的结果,但这是我遇到问题的mod_rewrite规则。复杂网站地图+索引xml文件的Apache 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]
我现在要离开这个问题了,因为我想知道为什么这会产生变化。谢谢。
对不起@anubhava,我是编辑我的问题,而答案就在这里有点比我们需要的更多,最重要的是因为我们的指令位于虚拟主机文件中,而不是'.htaccess'。之前的编辑器在问题中添加了“.htaccess”标签。我将探讨删除'-d'条件和'^。* $'规则的影响,但只要不会对应用程序的其他部分产生负面影响,更简单的规则集就会很好。 – oucil 2013-05-09 14:36:45
好的,我上面做了一些小的编辑,以确保这个anser也可以在httpd.conf中工作。 – anubhava 2013-05-09 14:57:02