此规则在.htaccess文件中运行良好:
ErrorDocument 403 /AccessDenied.html
ErrorDocument 404 /NotFound.html
RewriteEngine on
RewriteBase /
RewriteRule ^(index(\.(html|htm))?)$ / [R]
写成条件的相同规则不起作用:
ErrorDocument 403 /AccessDenied.html
ErrorDocument 404 /NotFound.html
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^(index(\.(html|htm))?)$
RewriteRule ^(index(\.(html|htm))?)$ / [R]
我想我的问题是,为什么规则在第一种情况下工作,而在第二种情况下不工作?我该如何解决?
答案 0 :(得分:3)
我认为您的问题是RewriteBase
处理(始终剥离前导斜杠)不会影响%{REQUEST_URI}
之类的变量,也不会适用于RewriteCond
处理。< / p>
因此,模式^(index(\.(html|htm))?)$
可以在RewriteRule
中正常工作,但不能与请求URI匹配RewriteCond
。您需要包含该前导斜杠(至少如果您使用的是^
锚点):
RewriteCond %{REQUEST_URI} ^/(index(\.(html|htm))?)$