url 中的“./”。做什么的?
"./" in the url. What for?
我目前正在学习.htaccess
文件中的正则表达式和正则表达式的应用。
在其中一个视频中我看到了这种代码:
RewriteRule ^(.*)$ ./index.php/ [L]
所以我想知道 ./
在 index.php
之前到底在做什么?
我尝试在 URL 中输入 ./
并且成功了:
http://localhost/CodeIgniter3Test/./index.php/welcome
被自动重定向到
http://localhost/CodeIgniter3Test/index.php/welcome
所以我的问题是这个重定向引擎在哪里执行(这个规则写在 httpd 或其他地方的文件)以及为什么 ./
可能被添加到模式 Substitution 在 RewriteRule
?
./ 字符在很多系统中表示“从当前目录”,就是这个意思,查看执行此文件的当前目录中的文件。
您也可以用两个点而不是一个点 (../) 来表示“来自上面的一个目录”
正如@Sebastian 在他的回答中已经指出的那样, 文件系统路径 中的.
(点)指的是当前 工作 目录 (CWD)。但是,在 Apache mod_rewrite 的上下文中,./
前缀可以说是一个错误,应该被删除。 “当前目录”由 directory-prefix*1 决定——与此无关带点。
但是,除非您将指令链接在一起,否则 ./index.php/
与 index.php/
相同,并且 ./
无论如何都会被解析掉(或者由重写引擎在请求映射到文件系统,或者在外部重定向的情况下由浏览器映射。
当 RewriteRule
替换 字符串以 ./
为前缀时,mod_rewrite 只是将其视为“相对”路径(任何字符串不以协议或斜杠开头的被认为是“相对的”)。在这种情况下,mod_rewrite 无论如何都会附加 目录前缀 。
例如,在位于文档根目录的 .htaccess
文件中给出以下指令(例如 /var/www/example/public_html
)
RewriteRule ^(.*)$ ./index.php/ [L]
如果你请求 /foo
那么上面的指令将请求重写为 ./index.php/foo
,之后(在这个处理阶段结束时)目录前缀被添加回成为 /var/www/example/public_html/./index.php/foo
.
Apache 然后在请求映射到文件系统时解析掉 ./
,因此它变成 /var/www/example/public_html/index.php/foo
。
因此,原始 替换 字符串上的 ./
前缀在这里没有任何作用。
what reason could possibly ./
be added to the Pattern Substitution in RewriteRule
?
回答你原来的问题.... none。
I tried to type "./" in url and it worked
浏览器实际上在发出 HTTP 请求之前将其删除 - ./
部分不会作为 HTTP 请求的一部分发送并且永远不会到达您的服务器。
were redirected automatically
这里没有实际的“重定向”——浏览器只是“修复”(即解析)浏览器地址栏中的 URL。
*1 directory_prefix 是其中的绝对文件系统路径.htaccess
文件位于。但是,这可以通过使用 RewriteBase
指令设置 URL-path 来覆盖。请注意,目录前缀总是 以斜线 .
结尾
另请参阅:
- What does a dot mean in a URL path?
我目前正在学习.htaccess
文件中的正则表达式和正则表达式的应用。
在其中一个视频中我看到了这种代码:
RewriteRule ^(.*)$ ./index.php/ [L]
所以我想知道 ./
在 index.php
之前到底在做什么?
我尝试在 URL 中输入 ./
并且成功了:
http://localhost/CodeIgniter3Test/./index.php/welcome
被自动重定向到
http://localhost/CodeIgniter3Test/index.php/welcome
所以我的问题是这个重定向引擎在哪里执行(这个规则写在 httpd 或其他地方的文件)以及为什么 ./
可能被添加到模式 Substitution 在 RewriteRule
?
./ 字符在很多系统中表示“从当前目录”,就是这个意思,查看执行此文件的当前目录中的文件。
您也可以用两个点而不是一个点 (../) 来表示“来自上面的一个目录”
正如@Sebastian 在他的回答中已经指出的那样, 文件系统路径 中的.
(点)指的是当前 工作 目录 (CWD)。但是,在 Apache mod_rewrite 的上下文中,./
前缀可以说是一个错误,应该被删除。 “当前目录”由 directory-prefix*1 决定——与此无关带点。
但是,除非您将指令链接在一起,否则 ./index.php/
与 index.php/
相同,并且 ./
无论如何都会被解析掉(或者由重写引擎在请求映射到文件系统,或者在外部重定向的情况下由浏览器映射。
当 RewriteRule
替换 字符串以 ./
为前缀时,mod_rewrite 只是将其视为“相对”路径(任何字符串不以协议或斜杠开头的被认为是“相对的”)。在这种情况下,mod_rewrite 无论如何都会附加 目录前缀 。
例如,在位于文档根目录的 .htaccess
文件中给出以下指令(例如 /var/www/example/public_html
)
RewriteRule ^(.*)$ ./index.php/ [L]
如果你请求 /foo
那么上面的指令将请求重写为 ./index.php/foo
,之后(在这个处理阶段结束时)目录前缀被添加回成为 /var/www/example/public_html/./index.php/foo
.
Apache 然后在请求映射到文件系统时解析掉 ./
,因此它变成 /var/www/example/public_html/index.php/foo
。
因此,原始 替换 字符串上的 ./
前缀在这里没有任何作用。
what reason could possibly
./
be added to the Pattern Substitution inRewriteRule
?
回答你原来的问题.... none。
I tried to type "./" in url and it worked
浏览器实际上在发出 HTTP 请求之前将其删除 - ./
部分不会作为 HTTP 请求的一部分发送并且永远不会到达您的服务器。
were redirected automatically
这里没有实际的“重定向”——浏览器只是“修复”(即解析)浏览器地址栏中的 URL。
*1 directory_prefix 是其中的绝对文件系统路径.htaccess
文件位于。但是,这可以通过使用 RewriteBase
指令设置 URL-path 来覆盖。请注意,目录前缀总是 以斜线 .
另请参阅:
- What does a dot mean in a URL path?