Edu*_*bar 5 regex apache .htaccess mod-rewrite url-rewriting
我已经在 2-3 个 apache 服务器上进行了测试,如果我不介意的话,%{REQUEST_URI}总是以 开头/,即使请求的 URL 是http://domain.com(没有和结束斜杠)。但是我已经看到 .htaccess 文件具有这样的规则:
RewriteRule ^[^/]*$ http...
Run Code Online (Sandbox Code Playgroud)
我的意思是,这种规则会匹配{REQUEST_URI}吗?或者我可能遗漏了一些关于 mod_rewrite 的东西(后面的参数是不是RewriteRule与 as 相同%{REQUEST_URI},因此不会发生匹配?)。
如果有人能就此启发我,将不胜感激。
.htaccess是每个目录指令,Apache 从 URI 模式中剥离当前目录路径(因此如果放置在 DocumentRoot 中,则为前导斜杠)RewriteRule。
%{REQUEST_URI}另一方面,始终包含从/域名后开始的完整 URI 值。
通过此 URL 的以下示例就可以清楚地了解:
URL: http://domain.com/path/files/user.php
Run Code Online (Sandbox Code Playgroud)
情况 1: .htaccess放置在DocumentRoot:
%{REQUEST_URI}: /path/files/user.php
RewriteRule pattern: path/files/user.php
Run Code Online (Sandbox Code Playgroud)
情况 2: .htaccess放置在DocumentRoot/path/:
%{REQUEST_URI}: /path/files/user.php
RewriteRule pattern: files/user.php
Run Code Online (Sandbox Code Playgroud)
情况 3: .htaccess放置在DocumentRoot/path/files/:
%{REQUEST_URI}: /path/files/user.php
RewriteRule pattern: user.php
Run Code Online (Sandbox Code Playgroud)
RewriteRule模式不一定与%{REQUEST_URI}. 从文档:
匹配的是什么?
在VirtualHost上下文中,模式最初将与主机名和端口之后和查询字符串之前的 URL 部分进行匹配(例如“/app1/index.html”)。
在Directory和 htaccess 上下文中,Pattern 最初将与文件系统路径匹配,在删除将服务器引导至当前的前缀
RewriteRule(例如,“app1/index.html”或“index.html”取决于指令的定义位置) )。
由于您在htaccess文件中看到这些,因此要匹配的路径不会以 a 开头/,因为删除的前缀将至少包含/.
| 归档时间: |
|
| 查看次数: |
3001 次 |
| 最近记录: |