为了澄清,这个问题已经过编辑:
我正在尝试创建“漂亮的 URL”,应该如下伪装自己:
mysite.com/index.php?p=1 ==> mysite.com/site_one/index.php
mysite.com/aboutus.php?p=2 ==> mysite.com/site_two/aboutus.php
mysite.com/anypage.php?p=3 ==> mysite.com/site_three/anypage.php
如您所见,mod_rewrite 应该简单地将“p”变量转换为预定的伪目录(该目录不存在……这只是美学重写)。
显然,这造成了复杂性。当用户访问 mysite.com/site_one/index.php 时,应该有一个后台传输到 mysite.com/index.php?p=1。此后台传输导致导致服务器错误的循环。
我试图通过使用以下代码来防止此循环:
RewriteCond %{QUERY_STRING} !NON=
RewriteCond %{QUERY_STRING} ^(.*[&?])?p=1([&].*)?$
RewriteRule ^/?(.*) /site_one/$1 [PT,L]
RewriteCond %{QUERY_STRING} !NON=
RewriteRule ^/?site_one/?(.*) /$1?NON=1&p=1 [PT,L]
不幸的是,这仍然会导致服务器错误。谁能看到代码哪里出错了?