我的项目中有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]
答案 0 :(得分:1)
在第一行中,^$
是一个正则表达式,它匹配具有完全零字符的URL路径,即/
页面,并重定向到public
文件夹中找到的实现任何额外的参数。最后的[L]
表示这是最后一条规则:如果正则表达式匹配,则不要再进一步.htaccess
。
在第二行中,^(.*)$
是一个匹配任意数量字符的正则表达式,并重定向到public
文件夹中的实现,但保留了该路径。 ($1
包含在第一个内部匹配的任何模式(在这种情况下,只有正则表达式中的一组括号。)因此,/contact-us
例如会被发送到public/contact-us
在第三行中,它将获取任何URL并将其url
参数传递给index.php
文件;也就是说,在contact-us
示例中,$_GET['url']
将是&#34;与我们联系&#34;。