我需要一些帮助来弄清楚以下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