.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的上下文中,它是毫无意义的(稍后当请求映射到文件系统时,它会得到解决)。我已经完全忘记了这个功能。。。我觉得我是个笨蛋((非常感谢您的回答和澄清意见。Sebastian,很抱歉,为了让其他用户看到他提供的扩展信息,我不得不将@MrWhite的回答标记为回答。但我对您的评论投了赞成票,并对此表示感谢。我希望您不会被我的选择冒犯。我这样做更多是为了社区,而不是为了b。)谢谢你提供了关于这个主题的详细信息。考虑到我正试图真正理解正则表达式和重写规则(而不仅仅是像woodoo魔术一样从互联网上复制粘贴)你的答案非常有效。你让我别无选择,除了在论坛上接受它作为答案,以便其他用户能够首先看到它并立即获得扩展信息。目前我正在阅读Rich Bowen的“Apache mod_rewrite”,并在教程中寻找一些特定的示例。欢迎你。“不仅仅是复制粘贴”-这是值得称赞的。不幸的是,mod_rewrite/Apache指令确实经常被复制/粘贴(以及bug和坏习惯)。质疑每一个字符和标志-许多例子不一定正确/最佳。
“Apache mod_rewrite”由Rich Bowen编写。
-这是什么时候编写的?我看到的版本是2006年的-你的版本相同吗?
RewriteRule ^(.*)$ ./index.php/$1 [L]