.htaccess htaccess中的重写规则
谁能解释一下下面这句话吗.htaccess htaccess中的重写规则,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,谁能解释一下下面这句话吗 RewriteRule ^(.*)$ /index.php/$1 [L] 这将导致index.php处理每个请求,它可以从$\u服务器['request\u URI']提取实际请求 因此,对/foo/bar的请求将被重写为/index.php/foo/bar重写规则的各个部分如下所示: 重写规则 指示此行将是重写规则,而不是重写条件或其他重写引擎指令之一 ^(.*)$ 匹配从请求的^到$结尾的所有字符(.*) /index.php/$1 请求将被重新写入,前面示例中的
RewriteRule ^(.*)$ /index.php/$1 [L]
这将导致index.php处理每个请求,它可以从$\u服务器['request\u URI']提取实际请求
因此,对/foo/bar的请求将被重写为/index.php/foo/bar重写规则的各个部分如下所示:
指示此行将是重写规则,而不是重写条件或其他重写引擎指令之一
匹配从请求的
^
到$
结尾的所有字符(.*)
请求将被重新写入,前面示例中的
(.*)
匹配的数据将替换为$1
这告诉mod_rewrite,如果步骤2中的模式匹配,则将此规则作为“最后”规则应用,不再应用
index.php
路由,这一模式在许多php的模型-视图-控制器实现中都可以看到index.php
可以检查请求的URL段(以及可能是通过GET还是POST发出请求),并使用此信息动态调用某个脚本,而该脚本的位置不必与请求URI隐含的目录结构相匹配
例如,/users/john/files/index
可以调用存储在脚本目录中名为user\u files.php的文件中的函数index('john')
。如果没有mod_rewrite,更传统的URL可能会使用可读性较差的查询字符串并直接调用文件:/user_files.php?action=index&user=john
(我在这里发表评论,因为我还没有代表对答案发表评论)
meagar答案中的第2点在我看来并不完全正确。我可能在这里遇到了麻烦(我一直在寻找有关.htaccess重写的帮助…),我很高兴得到任何澄清,但这是基于重写规则:
什么是匹配的
模式最初将与URL中主机名和端口之后、查询字符串之前的部分相匹配。如果希望匹配主机名、端口或查询字符串,请分别使用%{HTTP_HOST}、%%{SERVER_port}或%{query_string}变量的RewriteCond
对我来说,这似乎是一个
http://some.host.com/~user/folder/index.php?param=value
实际匹配的部分是
~user/folder/index.php
因此,这并不匹配“从请求的“^”到“$”结尾的所有字符(.*)”,除非“请求”不是我所想的那样。是的,这是正确的。(也许这应该是它自己的问题?)Apache将%{REQUEST\u URI}
变量定义为(使用您的示例)/~user/folder/index.php
(尽管出于我不想深入讨论的原因,第一个/
被删除以进行重写规则
评估)。所以我认为说它符合整个“请求”是公平的。我之前的评论无法识别您的请求\u URI
与Apache定义的值不同步,抱歉。抱歉,我的错误。我将从评论中编辑它。我想我学到的,并想与其他新手分享的是,除非你在RewriteCond中做了一些具体的事情,否则你的RewriteRule实际上不包括域或任何查询参数。