mod_rewrite php查询字符串

时间:2010-03-22 21:42:53

标签: apache mod-rewrite

我想改变:

  

http://example.com/index.php?p=blog&pid=2&lid=1&l=en

进入

  

http:// example.com/en/blog.html

或只是

  

http:// example.com/blog.html

1 个答案:

答案 0 :(得分:2)

认为你正试图获得更友好的网址,所以我假设要在内部重写http://example.com/en/blog.htmlhttp://example.com/index.php?p=blog&pid=2&lid=1&l=en

我可以推荐的最实用的方法是将所有内容重写为PHP脚本,并在PHP内部进行重写。这样,您的PHP应用程序就可以完全控制URI。

RewriteEngine On
RewriteBase /

RewriteRule .* index.php [L]

在PHP中,您可以通过superglobals访问原始URI:$_SERVER[ "REQUEST_URI" ]。注意:消毒,消毒,消毒!


<强> 修改

如果您想通过.htaccess完成整个事情,请参阅下面的示例。但请注意,如果将来扩展URI结构(即添加新规则),那么这种方法可能会变得更难以维护,而不是在PHP应用程序中进行。

RewriteEngine On
RewriteBase /

# http://example.com/en/blog.html
RewriteRule ^([^\/]*)/([^\/]*)\.html$ index.php?l=$1&p=$2 [NC,QSA,L]

# http://example.com/blog.html
RewriteRule ^([^\/]*)\.html$ index.php?p=$1 [NC,QSA,L]

# alternatively you can change the last line to add a default language (if not present)
RewriteRule ^([^\/]*)\.html$ index.php?l=sk&p=$1 [NC,QSA,L]

编辑#2: 在所有三条规则中添加了一个丢失的^字符,即将([\/]*)更改为([^\/]*)