Regex 复杂站点地图的Apache mod_重写规则+;索引xml文件

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(sitemap.org)文件的链接范围为500k,这些链接的变化非常频繁,我们希望动态生成它们。别担心,我们会将结果缓存一段时间,但我遇到的问题是mod_重写规则

由于我们有超过50k的链接,我们需要使用站点地图索引文件。站点地图和索引文件都将重定向到
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中也能工作。