%{REQUEST_URI}总是以斜线开头吗?

时间:2016-02-10 16:37:44

标签: regex apache .htaccess mod-rewrite url-rewriting

我已经在2-3个apache服务器上执行了测试,如果我的想法没有背叛我,%{REQUEST_URI}总是以/开头,即使请求的网址是{{3} }(没有和结束斜线)。但是我见过.htaccess文件有这样的规则:

RewriteRule ^[^/]*$ http...

我的意思是,这种规则会不会匹配{REQUEST_URI}?或者也许我错过了一些关于mod_rewrite的内容(不是RewriteRule之后的参数与%{REQUEST_URI}相同,因此不会发生匹配?)。

如果有人可以告诉我这件事,我们将非常感激。

2 个答案:

答案 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/