.htaccess RewriteCond

时间:2011-10-07 01:25:57

标签: .htaccess mod-rewrite

此规则在.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]

我想我的问题是,为什么规则在第一种情况下工作,而在第二种情况下不工作?我该如何解决?

1 个答案:

答案 0 :(得分:3)

我认为您的问题是RewriteBase处理(始终剥离前导斜杠)不会影响%{REQUEST_URI}之类的变量,也不会适用于RewriteCond处理。< / p>

因此,模式^(index(\.(html|htm))?)$可以在RewriteRule中正常工作,但不能与请求URI匹配RewriteCond。您需要包含该前导斜杠(至少如果您使用的是^锚点):

RewriteCond %{REQUEST_URI} ^/(index(\.(html|htm))?)$