这是一段代码,我是从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替换答案 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标志)。