Mod重写 - 动态$ _GET重写

时间:2011-03-29 14:21:26

标签: php apache .htaccess mod-rewrite url-rewriting

无论如何使用ModRewrite来实现以下目的:

初始网址:http://example.com/page?value=test

Rewirted URL:http://example.com/page/value/test

OR

初始网址:http://example.com/page?value=test&fruit=apple

Rewirted URL:http://example.com/page/value/test?fruit=apple

我需要这个规则是动态的,因为我不知道它将用于所有页面,我还需要在PHP中保留$ _GET变量。

由于

1 个答案:

答案 0 :(得分:2)

如果相关的URL存储在数据库中,并且需要重写,直到可以更新内容以反映新的URL模式,这个问题才有意义。其中,为了澄清问题,将被视为重定向不重写,从而改善SEO。然后,正如上面的评论指出的那样,URL可以重写以向PHP提供正确的URL参数。如果这是詹姆斯的意图,下面的配置将有所帮助:

### 301 redirect old query string URLs to pretty URLs
### This will help search engines index the new URLs, 
### not ones that are linked in content
### This is rather messy due to the 
### http://example.com/page/value/test?fruit=apple example
RewriteCond %{QUERY_STRING} value=([^&]*)
RewriteRule (.*) /page/value/%1 [R=301,E=rewrite:true]

RewriteCond %{ENV:rewrite} true
RewriteCond %{QUERY_STRING} !&
RewriteRule (.*) $1? [R=301,L]

RewriteCond %{ENV:rewrite} true
RewriteCond %{QUERY_STRING} &([^=]*)=(.*)$
RewriteRule (.*) $1?%1=%2 [R=301,L]

### Rewrite pretty urls with usable parameters
### [QSA] will maintain extra params such as &fruit=apple
RewriteRule /page/value/(.*) /page.php?value=$1 [QSA]

这很麻烦,但是我遇到了类似的情况,在重新定位存储在数据库中的旧URL是必要的,直到内容可以更新。

希望这有帮助。