mod_rewrite变量总是=='index.php'

时间:2011-12-01 22:26:24

标签: apache mod-rewrite

我有以下文件结构:

/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'。为什么?如何在我期待变量时使变量相等?

2 个答案:

答案 0 :(得分:3)

因为您已使用RewriteRule重写了网址,并且已经指向q的上一条路径。所以只需使用$_GET['q']

答案 1 :(得分:3)

您的重写规则正在循环播放。 Mod_rewrite不会停止重写,直到URI(没有查询字符串)在它通过规则之前和之后相同。当您最初请求http://localhost/framework/example时,会发生这种情况:

  1. 重写引擎需要/framework/example并删除前导“/”
  2. framework/example已通过规则
  3. framework/example被重写为index.php?q=framework/example
  4. Rerite引擎比较之前和之后framework/example!= index.php
  5. index.php?q=framework/example返回重写规则
  6. index.php被重写为index.php?q=index.php
  7. 重写引擎会比较之前和之后index.php == index.php
  8. 重写引擎停止,生成的URI为index.php?q=index.php
  9. 您需要添加一个条件,以便它不会重写相同的URI两次:

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/index\.php
    RewriteRule ^(.*)$ index.php?q=$1 [L]