这个问题已经被编辑过澄清:如何避免在mod_rewrite中循环?
我想如下打造“漂亮网址”应该把自己伪装:
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]
不幸的是,这还是引起了服务器错误。任何人都可以看到代码出错的地方吗?
虽然我非常有信心可以将一些基于RewriteCond的规则集中在一起来帮助您解决这个特定情况,但这可能无济于事。有关您需要处理的页数的更多信息,以及如何维护“p”值与友好URL之间的映射关系,这对您的问题会有帮助。 – timdev 2012-04-19 20:45:21
当然,让我更详细地解释一下: “p”的值可能会改变,所以我会为每个“p”值添加规则。例如,如果“p = 1”,该网站将显示“mysite.com/site_one”。如果“p = 2”,该网站将显示“mysite.com/site_two”。如果“p = 3”并且用户正在呼叫名为“about.php”的页面,则站点应该显示“mysite.com/site_three/about.php。 基本上,”p“变量只是伪装成目录 我希望这是有道理的。 – inveni0 2012-04-19 20:58:45
为什么不直接在$ p变量中命名页面,以便您可以执行诸如www.mysite.com/about/ - > www.mysite.com/page .php?p =大约。这只需要1条规则,而不必为每个页面设置规则 – Tom 2012-04-19 21:00:39