RewriteRule指令在.htaccess中的含义

时间:2018-06-17 21:11:53

标签: php .htaccess

我的项目中有2个.htaccess文件。这个在项目根目录中:

 <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    public/    [L]
    RewriteRule    ^(.*)$ public/$1    [L] 
 </IfModule>

以及我/公开广告资源中的第二个内容:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

<IfModule !mod_rewrite.c>
    ErrorDocument 404 index.php
</IfModule>

我想知道这三条线到底在做什么:

RewriteRule    ^$    public/    [L]
RewriteRule    ^(.*)$ public/$1    [L] 
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

1 个答案:

答案 0 :(得分:1)

在第一行中,^$是一个正则表达式,它匹配具有完全零字符的URL路径,即/页面,并重定向到public文件夹中找到的实现任何额外的参数。最后的[L]表示这是最后一条规则:如果正则表达式匹配,则不要再进一步.htaccess

在第二行中,^(.*)$是一个匹配任意数量字符的正则表达式,并重定向到public文件夹中的实现,但保留了该路径。 ($1包含在第一个内部匹配的任何模式(在这种情况下,只有正则表达式中的一组括号。)因此,/contact-us例如会被发送到public/contact-us

在第三行中,它将获取任何URL并将其url参数传递给index.php文件;也就是说,在contact-us示例中,$_GET['url']将是&#34;与我们联系&#34;。