使用GET变量创建漂亮的URL

时间:2014-09-25 12:34:54

标签: php regex apache .htaccess mod-rewrite

此时我的情况是重写了相当的url,以便所有内容都通过index.php进行,同时保留$_GET个变量。 htaccess看起来如下:

RewriteEngine On
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)?$ index.php?p=$1&projectid=$2&sub=$3&type=$4
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)?$ index.php?p=$1&projectid=$2&sub=$3
RewriteRule ^([^/\.]+)/([^/\.]+)?$ index.php?p=$1&projectid=$2
RewriteRule ^([^/\.]+)/?$ index.php?p=$1

这很好用。但是,我希望它能够以相反的方式工作。如果有人前往http://www.example.com/index.php?p=page&projectid=123,他们将被重定向到http://www.example.com/page/123

这可能,如果可行,怎么样?到目前为止,我所管理的所有内容都是创建重定向循环。

对于那些感兴趣的人,我创建的重定向循环如下所示:

RewriteCond %{QUERY_STRING} ^p=([^&]+)
RewriteRule ^/?index\.php$ http://www.example.com/%1? [L,R=301]

1 个答案:

答案 0 :(得分:1)

  

我希望它能以相反的方式工作。如果有人前往http://www.example.com/index.php?p=page&projectid=123,他们将被重定向到http://www.example.com/page/123

是的确有可能,但您需要使用THE_REQUEST变量。

RewriteCond %{THE_REQUEST} \s/+index\.php\?p=([^\s&]+)&projectid=([^\s&]+) [NC]
RewriteRule ^ /%1/%2? [R=302,L]

您也可以为其他网址构建类似的规则。