.htaccess重写条件

.htaccess重写条件,.htaccess,mod-rewrite,.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.h

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

我想我的问题是,为什么规则在第一种情况下有效,而在第二种情况下无效?我该如何解决它呢?

我相信你的问题是
重写基
处理(总是去掉前导斜杠)不会影响像
%{REQUEST\u URI}
这样的变量,也不会申请
重写条件
处理

因此,模式
^(index(\(html | htm))?)$
重写规则
中可以正常工作,但在
重写条件
与请求URI匹配时则不行。您需要包括该前导斜杠(至少如果您使用的是开头的
^
锚点):


为什么要将版本与重写条件一起使用?这样,我就可以理解重写条件是如何工作的;我根本没能让它工作;我绝对需要它,以便以后编写其他规则。
RewriteCond %{REQUEST_URI} ^/(index(\.(html|htm))?)$