我的网页上有重写规则。
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.com
,http://example.com/
,http://example.com/about
,http://example.com/about/
你能帮我解决这个问题吗?
答案 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]