我已经在2-3个apache服务器上执行了测试,如果我的想法没有背叛我,%{REQUEST_URI}
总是以/
开头,即使请求的网址是{{3} }(没有和结束斜线)。但是我见过.htaccess文件有这样的规则:
RewriteRule ^[^/]*$ http...
我的意思是,这种规则会不会匹配{REQUEST_URI}
?或者也许我错过了一些关于mod_rewrite的内容(不是RewriteRule
之后的参数与%{REQUEST_URI}
相同,因此不会发生匹配?)。
如果有人可以告诉我这件事,我们将非常感激。
答案 0 :(得分:4)
grid_1
个模式不一定与RewriteRule
匹配。来自the docs:
匹配什么?
在VirtualHost上下文中,模式最初将匹配 在主机名和端口之后,以及之前的URL部分 查询字符串(例如" /app1/index.html")。
在Directory和htaccess上下文中,Pattern最初会是 删除前缀后,与文件系统路径匹配 将服务器引导至当前
%{REQUEST_URI}
(例如" app1 / index.html"或 "的index.html"取决于指令的定义位置。
由于您在RewriteRule
文件中看到了这些内容,因此要匹配的路径不会以htaccess
开头,因为删除的前缀至少包含/
。
答案 1 :(得分:3)
/components/bootstrap/dist
是每个目录指令,Apache从.htaccess
URI模式剥离当前目录路径(因此如果置于DocumentRoot中,则会导致斜杠)。
RewriteRule
始终包含从域名后%{REQUEST_URI}
开始的完整URI值。
这个URL的例子很清楚:
/
案例1: URL: http://domain.com/path/files/user.php
位于.htaccess
:
DocumentRoot
案例2: %{REQUEST_URI}: /path/files/user.php
RewriteRule pattern: path/files/user.php
位于.htaccess
:
DocumentRoot/path/
案例3: %{REQUEST_URI}: /path/files/user.php
RewriteRule pattern: files/user.php
位于.htaccess
:
DocumentRoot/path/files/