2015-05-21 63 views
0

我想改变我的网址,从这个例子:的.htaccess重写URL与参数

www.website.com/?page=about 
www.website.com/?page=info 
www.website.com/?page=contact 

这样:

www.website.com/about 
www.website.com/info 
www.website.com/contact 

这应该是可行的一个规则,我希望。我一直在环顾四周,但我看到人们分别做每一件事情。 所以唯一的URL参数是“页面”,网站只有一个深度。应该很容易吧? :)

回答

2

这是一个非常基本的常见问题。这在你的根目录下的.htaccess中。

RewriteEngine On 
RewriteBase/

#prevent anyone from using the old urls 
RewriteCond %{THE_REQUEST} [A-Z]{3,}\ /+\?page=([^&\ ]+) [NC] 
RewriteRule^/%1? [R=301,L] 

#provide pretty URL's 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/?$ /?page=$1 [L] 
2

您可以在DOCUMENT_ROOT/.htaccess文件中使用此代码:

RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} \s/+\?page=([^\s&]+) [NC] 
RewriteRule^%1? [R=302,L,NE] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/.]+)/?$ ?page=$1 [L,QSA] 
+0

我很好奇:有没有你倾向于使用'THE_REQUEST'而不是'QUERY_STRING'什么特别的原因?毕竟,查询字符串是所有需要在这里测试的......我只是认为,对于那些刚接触mod_rewrite的人来说,这可能看起来有点混乱,尤其是因为没有多少人知道'THE_REQUEST'通常包含什么。 –

+0

使用'QUERY_STRING'会导致重定向循环,因为'QUERY_STRING'在第二条规则中被重写为'?page = ...'。 'THE_REQUEST'在执行其他规则后不会更改其值。 – anubhava

+1

当然 - 在那里我一直使用虚拟'&r's来防止循环。这更有意义 - 谢谢澄清。 –