我正在开发一个Symfony2 PHP应用程序。在我的Wamp服务器中,应用程序存储在www/mySite/
中,而我的index.php是www/mySite/web/app_dev.php
。因为/我有像127.0.0.1/mySite/web/app_dev.php
我想更改路径,因此只需输入127.0.0.1即可访问我的索引文件。经过一些研究,我发现在www文件夹中写这个.htacces有效:
RewriteEngine on
Rewritecond %{REQUEST_URI} !^/mySite
Rewriterule ^(.*)$ /mySite/web/app_dev.php
唯一的问题是我不明白为什么。有人向我解释一下吗?
我真的不明白最后两行,正如^(.*)$
由于
答案 0 :(得分:6)
这确实是一个简单的正则表达式:
^(.*)$
让我们分手吧:
^
- 请求字符串(
和)
- 捕获组,用于匹配字符串的一部分.
- 任何角色.*
- 任何次数的任何特征$
- 字符串结尾所以,把它们放在一起,就意味着:“匹配任意数量的任何字符”。之后,这个匹配的部分(括号中的部分)被/mySite/web/app_dev.php
替换。
为了更多地解释正则表达式,我们可以设想不同的正则表达式:
^lorem.*$
- 字符串以“lorem”开头,后跟任意数量的任何字符^$
- 一个空字符串^...$
- 包含三个字符的字符串。现在,把它们放在一起--Apache的重写规则通常由两个指令构成:RewriteCond
和RewriteRule
。后一个指令只会影响符合RewriteCond
中给出的条件的请求。您可以将它们视为“if-then”对:
# the "if" part - if request URI does not match ^/mySite
Rewritecond %{REQUEST_URI} !^/mySite
# the "then" part - then rewrite it to "/mySite/web/app_dev.php"
Rewriterule ^(.*)$ /mySite/web/app_dev.php
答案 1 :(得分:3)
Rewritecond %{REQUEST_URI} !^/mySite
检查并确保所请求的uri不以(“!”)开头(“^”)“/ mySite”
Rewriterule ^(.*)$ /mySite/web/app_dev.php
如果确实如此,请以(“^”)任意字符(“。”)开头任意次数(“*”)并将其发送至“/mySite/web/app_dev.php"
所以/ controller / site-action的URI将发送到该文件,而/mySite/css/style.css则不会。
答案 2 :(得分:0)
许多要检查的地方会给出细分和解释:http://regex101.com/
答案 3 :(得分:0)
正则表达式在字符后起作用。在`.htaccess中,它检查当前URI是否与正则表达式匹配。在此图像中,按照字符后面的行字符返回true:
^
和$
代表字符串的开头和结尾。
.
允许任何字符和*
告诉“尽可能多地重复最后一条规则”。