如何在.htaccess中将所有请求链接到index.php并将sitemap.xml链接到sitemap.php

时间:2018-07-10 09:28:45

标签: .htaccess mod-rewrite sitemap

这是一段代码,我是从stackoverflow的不同文章中收集的:

DirectoryIndex /index.php
RewriteEngine on
RewriteBase /subDir

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^(.*),!^(sitemap\.xml|robots\.txt) /index.php [NC,L]

RewriteRule ^sitemap\.xml$ sitemap.php [L]

将所有请求链接到index.php效果很好,但是将sitemap.xml链接到sitemap.php根本不起作用。打开sitemap.xml时仅看到错误消息。 sitemap.php文件存在且运行良好,sitemap.xml不存在,并且在请求

时需要用sitemap.php替换

1 个答案:

答案 0 :(得分:0)

1)所有链接到index.php的请求请尝试以下操作:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]

2)首先,重新添加[L]标志。其次,如果一个规则取代了另一个规则,请检查您的重写规则regex以使其更好地匹配,就像整个请求一样:

RewriteRule ^sitemap\.xml$ xmlsitemap.php [L]
RewriteRule ^sitemap$ sitemap.php [L]

如果已匹配一个规则,则L标志将阻止运行其他规则(但仍可以触发内部重定向,另请参见END标志而不是L标志)。