.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

重写规则的各个部分如下所示:

  • 重写规则
    指示此行将是重写规则,而不是重写条件或其他重写引擎指令之一

  • ^(.*)$
    匹配从请求的
    ^
    $
    结尾的所有字符
    (.*)

  • /index.php/$1
    请求将被重新写入,前面示例中的
    (.*)
    匹配的数据将替换为
    $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实际上不包括域或任何查询参数。