RegExp htaccess in php


RegExp htaccess in php

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

这是我的.htaccess文件代码。

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

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

谢谢。

当您使用大括号(.*)时,意味着您正在捕获组。您可以将内容与$1一起使用。如果你不使用$1,那么你就不会在这里得到网址:url=$1。详细信息:http://www.regular-expressions.info/brackets.html

$1与捕获的内容(在parens之间)匹配,在这种情况下是他们试图访问的页面的URL。

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

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

原始URL可以从$_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]