这个代码在HTACCESS中说了什么

时间:2013-12-02 08:50:52

标签: .htaccess mod-rewrite

我只是一个初学者,试图了解HTACCESS,但似乎无法在Google上找到任何可以解释下面代码含义的内容。我知道它可以制作漂亮的URL,但它的长篇描述是什么。请专业人士或专家可以指导我解释这一点。谢谢!

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

1 个答案:

答案 0 :(得分:2)

让我们一行一行地看一下

<IfModule mod_rewrite.c>

这表示只有在目标服务器上安装并启用了mod_rewrite时才能读取标签之间的内容。

RewriteEngine On

这会打开RewriteEngine。没有它,没有RewriteRules生效。 (docs

RewriteBase /

重定向请求时使用RewriteBase。据我所知,设置它永远不会受到伤害,即使有时它会自动进行。 (docs

RewriteRule ^index\.php$ - [L]

这是第一个RewriteRule。如果对http://example.com/index.php(包含或不包含查询字符串)发出请求,则不会重写该URL。 [L]表示如果此规则匹配,则它是通过文件“传递”期间匹配的最后一条规则。因为不会重写URL,所以不会再通过.htaccess文件“传递”。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

如果先前的规则不匹配,它将尝试匹配此规则。此规则匹配任何至少1个字符的网址。对http://example.com的请求与此规则不符。如果RewriteRule的第一部分匹配,它将检查条件。第一个条件检查所请求的文件(%{REQUEST_FILENAME})是否不是现有文件(!-f)。 -f表示“是现有文件”,前缀!否定了这一点。第二个条件类似,但测试所请求的文件是否不是现有目录。如果两个条件都为真,则请求将在内部重写为index.php[L]标志将停止重写此传递,在下一次传递期间,第一个规则将匹配,并完全停止重写。

有关RewriteCondRewriteRule的可能性的详细信息,请参阅the documentation