2011-10-30 125 views
0

我在构建重写规则时遇到了一些问题。我想重写,并最终重定向的URL有一个搜索查询它看起来像这样:htaccess重写/重定向

http://www.mysite.com/pages.php?category=fruit

我想它重定向到:

http://www.mysite.com/pages.php/fruit

原来的地址确实不再存在。我试图构建一个重写但这不太工作,我怎么想它的工作

RewriteEngine on 
RewriteCond %{QUERY_STRING} =category=fruit` 
RewriteRule ^pages\.php$ pages.php/fruit/ [L,R=301] 

http://www.mysite.com/home/linux123/m/mysite.com/user/htdocs/pages.php/fruit/ 

任何意见上固定重写规则的建设将是巨大的。提前致谢。

+0

你甚至不需要htaccess的。只需使用$ _SERVER [“PATH_INFO”]而不是$ _GET ['category']。只要注意path_info以'/'开头,所以你应该删除那个substr($ _ SERVER [“PATH_INFO”],1) – Gerben

+0

谢谢Gerben。我意识到,我可以从网页本身获取数据和/或重定向后,我给了它几个小时的思考。 – kaliok

回答

2

URL重写的工作方式是,它采用不存在的URL并将其重写为指向存在的URL。不存在的URL更多是介绍性的东西,而不是功能性的东西。反过来,你的网页上的链接应该是http://www.mysite.com/pages.php/fruit,当用户点击它们时,它们应该在内部被转发到像这样的http://www.mysite.com/pages.php?category=fruit。重写规则必须进行相应的书面这将是

^pages\.php/([A-Za-z])*$ pages.php?category=$1 [NC,L] 

如果类别是严格按字母顺序排列,否则字母数字

^pages\.php/([A-Za-z0-9])*$ pages.php?category=$1 [NC,L] 

你甚至可以测试使用这个在线验证您的正则表达式重写规则;

Regex Validator

希望这有助于..

+0

感谢您的建议。但是我想要做的是使用我的新系统。新系统不使用查询字符串。我想使用非查询网址。我也希望它只针对有限数量的网址 - 即一个用于水果,一个用于蔬菜,另一个用于杂物......主要原因是带查询字符串的旧网址仍然停留在谷歌中,虽然我提供了一个新的站点地图,我只想抓住任何已经使用旧的查询字符串url进行索引并重定向的站点地图。 – kaliok

+0

我想我真的需要知道的是如何使它改写重写规则不包含linux位:home/linux123/m/mysite.com/user/htdocs – kaliok

+0

RewriteRule自动删除unix路径。您只能匹配rewritebase之后的部分。从谷歌中删除旧网址的最简单方法是将pages.php重命名为例如pages2.php,并相应地更改htaccess。如果你想让旧的url重定向到新的url,你可以创建一个新的pages.php文件,它执行类似header(“Location:http:// {$ _SERVER ['HTTP_HOST']} /pages2.php/ { $ _GET ['category'} /“)或者只是使用htaccess。我也建议从url中删除.php部分。所以^ pages /([A-Za-z])* $ pages2.php?category = $ 1 [NC,L] – Gerben