2013-05-09 77 views
1

我们管理的网站地图(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] 

我现在要离开这个问题了,因为我想知道为什么这会产生变化。谢谢。

回答

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] 
+0

对不起@anubhava,我是编辑我的问题,而答案就在这里有点比我们需要的更多,最重要的是因为我们的指令位于虚拟主机文件中,而不是'.htaccess'。之前的编辑器在问题中添加了“.htaccess”标签。我将探讨删除'-d'条件和'^。* $'规则的影响,但只要不会对应用程序的其他部分产生负面影响,更简单的规则集就会很好。 – oucil 2013-05-09 14:36:45

+0

好的,我上面做了一些小的编辑,以确保这个anser也可以在httpd.conf中工作。 – anubhava 2013-05-09 14:57:02