Regex 复杂站点地图的Apache mod_重写规则+;索引xml文件
我们管理的sitemap(sitemap.org)文件的链接范围为500k,这些链接的变化非常频繁,我们希望动态生成它们。别担心,我们会将结果缓存一段时间,但我遇到的问题是mod_重写规则 由于我们有超过50k的链接,我们需要使用站点地图索引文件。站点地图和索引文件都将重定向到Regex 复杂站点地图的Apache mod_重写规则+;索引xml文件,regex,apache,.htaccess,mod-rewrite,sitemap,Regex,Apache,.htaccess,Mod Rewrite,Sitemap,我们管理的sitemap(sitemap.org)文件的链接范围为500k,这些链接的变化非常频繁,我们希望动态生成它们。别担心,我们会将结果缓存一段时间,但我遇到的问题是mod_重写规则 由于我们有超过50k的链接,我们需要使用站点地图索引文件。站点地图和索引文件都将重定向到sitemap.php文件,该文件将使用文件名模式($\u SERVER['REQUEST\u URI'])来确定要显示的列表 文件名模式如下所示: www.domain.com/sitemap.index.xml www
sitemap.php
文件,该文件将使用文件名模式($\u SERVER['REQUEST\u 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]
我现在将这个问题留待讨论,因为我想知道为什么这会带来不同。谢谢。此规则是多余的,应删除:
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]
此规则是多余的,应删除:
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]
抱歉@anubhava,当你的答案出现时,我正在编辑我的问题。这里有比我们需要的更多的内容,最重要的是因为我们的指令在vhost文件中,而不是
.htaccess
。上一个编辑器在问题中添加了“.htaccess”标记。我将探讨删除-d
条件和^.*$
规则的影响,但是,一个简单的规则集会很好,只要它不会对应用程序的其余部分产生负面影响。好的,我在上面做了一些小的编辑,以确保这个anser在httpd.conf中也能工作。抱歉@anubhava,你的答案进来时,我正在编辑我的问题。这里有比我们需要的更多的内容,最重要的是因为我们的指令在vhost文件中,而不是.htaccess
。上一个编辑器在问题中添加了“.htaccess”标记。我将探讨删除-d
条件和^.*$
规则的影响,但是,一个更简单的规则集会更好,只要它不会对应用程序的其余部分产生负面影响。好的,我在上面做了一些小的编辑,以确保这个anser在httpd.conf中也能工作。