0

为了澄清,这个问题已经过编辑:

我正在尝试创建“漂亮的 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]

不幸的是,这仍然会导致服务器错误。谁能看到代码哪里出错了?

4

2 回答 2

0

我最终不得不解决这个问题,因为没有 htaccess 方法对我有帮助。我基本上将“p”的所有值转发到适当的页面并将变量“p”更改为变量“s”。然后我告诉我的网络应用程序“p”的值等于“s”存在的“s”的值。我将此代码放在与服务器通信的文件中,因此它存在于我网站的所有页面上。

这既丑陋又草率,但这也是我必须首先这样做的原因。

于 2012-05-08T18:55:05.410 回答
0

如果需要,您可以在幕后设置一个虚拟查询变量。尝试这样的事情:

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

于 2012-04-19T21:37:47.793 回答