PHP & URL Rewriting


PHP & URL Rewriting

我需要一些帮助来弄清楚以下URL重写规则的含义。我能理解前三行,但我被index.php/$1部分卡住了。/在这个规则中到底意味着什么?在文件名之后,我唯一希望看到的就是查询字符串分隔符(?)。这是我第一次看到/作为分隔符。它到底是什么意思?

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [PT,L]     
</IfModule>

<IfModule mod_rewrite.c>...</IfModule>块确保只有在加载mod_rewrite模块时才考虑该块中包含的所有内容。否则,您将面临服务器错误,或者所有URL重写请求都将被忽略。

以下两行是它们之后的RewriteRule行的条件。这意味着只有在满足这两个条件的情况下才会对RewriteRule进行评估。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

这些行只是简单地说明,只有当服务器上没有与URI匹配的现有文件或文件夹时,才会进行重写(RewriteRule行)。如果它们确实存在,那么它们将被提供,除非有其他指令阻止,否则将发生重写。

最后一行将进行实际的重写。它将取网站域名后面的任何内容,并将其附加到以index.php/开头的重写请求中。

下面是一个例子。

假设您请求example.com/example-page.html

如果名为example-page.html的虚拟主机根文件夹中没有现有文件或文件夹,则结尾处的重写规则将把请求重写为类似example.com/index.php/example-page.html

应用程序如此重写请求的主要原因是确保它们有一个单一的入口点,通常称为引导程序,从安全角度来看,这被认为是一种很好的做法,也提供了对请求的更细粒度控制。

在我看来,这是一个非常好的mod_rewrite初学者友好教程。

这只是重写url名称。

例如,这个网址:

http://www.example.com/something/else

将与相同

http://www.example.com/index.php/something/else