在php中使用RegExp htaccess

时间:2015-12-11 18:40:44

标签: php regex .htaccess

我想将我的所有请求重定向到我的index.php页面并在那里获取网址。

这是我的.htaccess文件代码。

RewriteEngine On
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

我的问题是,为什么我必须在$1后提出url=

感谢。

3 个答案:

答案 0 :(得分:1)

使用大括号(.*)时,表示您正在捕获该组。您可以将内容与$1一起使用。如果您不使用$1,则不会在此处获取该网址:url=$1。有关详细信息:http://www.regular-expressions.info/brackets.html

答案 1 :(得分:1)

$1匹配任何捕获(在parens之间),在这种情况下是他们试图去的页面的URL。

这允许您使用$_GET['url']查看他们尝试在您的php脚本中访问的页面。

如果没有它,您仍然可以通过几种不同的方式获取请求的URL,但这是最简单且最可能准确的。

答案 2 :(得分:1)

原始网址可以从$_SERVER['REQUEST_URI']获取,因此,严格来说,您不需要mod_rewrite来明确传输它。

例如,这是Lumen框架使用的规则集:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

无论如何,如果您仍然愿意传递它,您不需要明确地捕获它,因为完全匹配的表达式始终是$0自动:

RewriteRule ^.*$ index.php?url=$0 [QSA,L]