此问题已经过编辑以澄清:
我正在尝试创建“漂亮的网址”,应该按照以下方式伪装自己:
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]
不幸的是,这仍然会导致服务器错误。任何人都可以看到代码出错的地方吗?
答案 0 :(得分:0)
如果需要,可以在幕后设置虚拟查询var。尝试这样的事情:
RewriteEngine On
RewriteCond %{QUERY_STRING} !NON=
RewriteCond %{QUERY_STRING} ^(.*[&?])?p=1([&].*)?$
RewriteRule ^/?page.php /main_site/ [R,QSA]
RewriteCond %{QUERY_STRING} !NON=
RewriteRule ^/?main_site/?(.*) /page.php?NON=1&p=1&extra=$1 [QSA,L]
只需忽略来自php中的get / request的NON
。
答案 1 :(得分:0)
我不得不解决这个问题,因为没有htaccess方法帮助我。我基本上转发了" p"的所有价值观。到适当的页面并更改变量" p"变量" s"。然后我告诉我的网络应用程序" p"等于" s"在哪里" s"存在。我将此代码放在与服务器通信的文件中,因此它存在于我的所有网站页面上。
它既丑陋又草率,但我首先要这样做的原因也是如此。