我有以下文件结构:
/framework
/.htaccess
/index.php
以及.htaccess文件中的以下规则:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)$ index.php?q=$1 [L]
</IfModule>
当我导航到http://localhost/framework/example
时,我希望查询字符串等于'framework / example',但它等于'index.php'。为什么?如何在我期待变量时使变量相等?
答案 0 :(得分:3)
因为您已使用RewriteRule
重写了网址,并且已经将指向q
的上一条路径。所以只需使用$_GET['q']
答案 1 :(得分:3)
您的重写规则正在循环播放。 Mod_rewrite不会停止重写,直到URI(没有查询字符串)在它通过规则之前和之后相同。当您最初请求http://localhost/framework/example时,会发生这种情况:
/framework/example
并删除前导“/”framework/example
已通过规则framework/example
被重写为index.php?q=framework/example
framework/example
!= index.php
index.php?q=framework/example
返回重写规则index.php
被重写为index.php?q=index.php
index.php
== index.php
index.php?q=index.php
您需要添加一个条件,以便它不会重写相同的URI两次:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*)$ index.php?q=$1 [L]