我想将所有请求重定向到我的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]