我的RewriteRule有什么问题?看起来没问题,但它不起作用

时间:2013-05-02 10:28:53

标签: .htaccess mod-rewrite url-rewriting

我的网页上有重写规则。

RewriteEngine On

RewriteRule ^(.*) index.php?p=$1 [L]

我希望它能够工作,所以它重写了这样的URL:

http://example.com           -> index.php
http://example.com/home      -> index.php?p=home
http://example.com/lol       -> index.php?p=lol

但是当我在index.php

中使用以下php代码时
print_r($_GET)

它给出了这个:

Array ( [p] => index.php )

它在所有网址中都提供相同的结果(我尝试了这些结果:http://example.comhttp://example.com/http://example.com/abouthttp://example.com/about/

你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

我明白了:

正确的代码是:

RewriteEngine On
RewriteRule ^([^.]+)/?$ index.php?p=$1  [NC,L]

很抱歉这个问题。

答案 1 :(得分:0)

问题是您的重写URL仍然符合规则,并且您将重新进行重写:

http://example.com/home
http://example.com/index.php?p=home
http://example.com/index.php?p=index.php

由于未设置[QSA]标志,因此新的p参数将替换前一个参数。 (我不完全确定为什么你没有得到无限循环,我想mod_rewrite会检查以避免无用的重定向)。

您需要添加其他条件。例如,只有在URL与物理文件或目录不匹配时才能进行重写:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [L]