.htaccess &引用/&引用;在url中。为何
我目前正在.htaccess &引用/&引用;在url中。为何,.htaccess,redirect,url-rewriting,url-routing,.htaccess,Redirect,Url Rewriting,Url Routing,我目前正在.htaccess文件中学习正则表达式和regex的应用程序。 在其中一个视频中,我看到了这种代码: RewriteRule ^(.*)$ ./index.php/$1 [L] 所以我想知道/在index.php之前到底在做什么? 我尝试在URL中键入/,结果成功: http://localhost/CodeIgniter3Test/./index.php/welcome 已自动重定向到 http://localhost/CodeIgniter3Test/index.php/wel
.htaccess
文件中学习正则表达式和regex的应用程序。
在其中一个视频中,我看到了这种代码:
RewriteRule ^(.*)$ ./index.php/$1 [L]
所以我想知道/
在index.php
之前到底在做什么?
我尝试在URL中键入/
,结果成功:
http://localhost/CodeIgniter3Test/./index.php/welcome
已自动重定向到
http://localhost/CodeIgniter3Test/index.php/welcome
所以我的问题是这个重定向引擎在哪里执行(这个规则是写在httpd或其他地方的文件),以及为什么可以将/
添加到RewriteRule
中的模式替换中?在许多系统中,./characters表示“来自当前目录”,这就是它的意思,查找当前目录中执行此文件的文件
您也可以用两个点来表示“来自上面的一个目录”,而不是一个(../)正如@Sebastian在他的回答中指出的,文件系统路径中的
(点)指的是当前工作目录(CWD)。但是,在Apache mod_rewrite的上下文中,/
前缀可以说是一个错误,应该删除。“当前目录”由目录前缀*1确定,它与点无关
但是,除非将指令链接在一起,否则/index.php/$1
与index.php/$1
是一样的,/
无论如何都会得到解决(请求映射到文件系统时由重写引擎解决,或者在外部重定向时由浏览器解决)
当重写规则
替换字符串以/
作为前缀时,mod_rewrite将其视为“相对”路径(任何不以协议或斜杠开头的字符串都被视为“相对”)。在这种情况下,mod_rewrite会附加目录前缀
例如,在文档根目录中的.htaccess
文件中给出以下指令(例如/var/www/example/public\u html
)
如果您请求了/foo
,则上述指令会将请求重写为/index.php/foo
,之后(在此处理阶段结束时),目录前缀会添加回/var/www/example/public\u html//index.php/foo
然后,当请求映射到文件系统时,Apache解析掉/
,因此它变成/var/www/example/public\u html/index.php/foo
因此,原始替换字符串上的/
前缀在这里没有任何作用
在重写规则
中的模式替换中可能会添加什么原因
要回答你原来的问题。。。。没有
我试着在url中键入“/”,结果成功了
浏览器实际上会在发出HTTP请求之前将其删除,/
部分不会作为HTTP请求的一部分发送,也不会到达您的服务器
被自动重定向
这里没有实际的“重定向”-浏览器只是“修复”(即解析)浏览器地址栏中的URL
*1目录前缀是
.htaccess
文件所在的绝对文件系统路径。但是,这可以通过使用RewriteBase
指令设置URL路径来覆盖。请注意,目录前缀始终以斜杠结尾
另见:
“Apache mod_rewrite”由Rich Bowen编写。
-这是什么时候编写的?我看到的版本是2006年的-你的版本相同吗?
RewriteRule ^(.*)$ ./index.php/$1 [L]