理解一个简单的正则表达式

use*_*742 2 php regex .htaccess symfony

我正在开发一个Symfony2 PHP应用程序.在我的Wamp服务器中,应用程序存储在www/mySite/我的index.php中www/mySite/web/app_dev.php.因为那个,我有像URL一样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
Run Code Online (Sandbox Code Playgroud)

唯一的问题是我不明白为什么.有人向我解释一下吗?我真的不明白最后两行,和正则表达式一样^(.*)$

谢谢

kam*_*uel 6

这确实是一个简单的正则表达式:

^(.*)$
Run Code Online (Sandbox Code Playgroud)

我们分手吧:

  • ^ - 乞求一根绳子
  • ()- 捕获组,用于匹配字符串的一部分
  • . - 任何角色
  • .* - 任何次数的任何特征
  • $ - 字符串的结尾

所以,把它们放在一起,就意味着:"匹配任意数量的任何字符".后来这个匹配的部分(括号中的部分)被替换为/mySite/web/app_dev.php.

为了更多地解释正则表达式,我们可以想象不同的正则表达式:

  • ^lorem.*$ - 以单词"lorem"开头的字符串,后跟任意数量的任何字符
  • ^$ - 一个空字符串
  • ^...$ - 包含三个字符的字符串.

现在,将它们放在一起--Apache的重写规则通常由两个指令构成:RewriteCondRewriteRule.后一个指令只会影响符合条件中给出的条件的那些请求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
Run Code Online (Sandbox Code Playgroud)