我想将我的所有请求重定向到我的index.php
页面并在那里获取网址。
这是我的.htaccess
文件代码。
RewriteEngine On
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
我的问题是,为什么我必须在$1
后提出url=
?
感谢。
答案 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]