.htaccess漂亮的URL无法正确显示重定向

时间:2013-04-02 20:54:08

标签: regex .htaccess mod-rewrite

我正在尝试使用mod_rewrite在我的.htaccess文件中配置动态mod重写规则。我非常接近搞清楚这一点。我正在尝试获取这些网址:

http://www.mysite.com/index.php?service=14&title=events
http://www.mysite.com/index.php?service=48&title=planning

自动重写为:

http://www.mysite.com/service/14/events
http://www.mysite.com/service/48/planning

到目前为止,这是我的代码:

RewriteRule ^service/(.*)/(.*)$ index.php?service=$1&title=$2 [NC,L]
RewriteCond %{QUERY_STRING} ^service=$1&title=$2 [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index.php [NC]
RewriteRule ^index.php$ /service/$1/$2 [L,R=301]

我觉得最后一行可能有问题吗?我不是最好的正则表达式,所以任何帮助将不胜感激。 编辑:只是想明确漂亮的URL确实有效。但是,旧URL不会重定向,仍会显示在浏览器中。

我不确定这是否会更容易,但如果我能让网址看起来像这样:

http://www.mysite.com/service/14/title/events
http://www.mysite.com/service/48/title/planning

然后这也会奏效。我真的不需要第二个查询标题在URL中,但是如果它更容易留在那里,那么没什么大不了的。

编辑:已回复 非常感谢所有帮助解决方案的人。我的重写规则得到了这个:

RewriteRule ^index/service/(.*)/(.*)/$ index.php?service=$1&title=$2

一旦我添加了'index',它就可以使用两个查询字符串。就重定向而言,我编辑了我的PHP脚本并完成了所有重定向的URL,这样更容易。特别感谢mkjasinski指出这一点。

2 个答案:

答案 0 :(得分:1)

试试这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^service/([0-9]+?)?/([a-zA-Z\-]+?)$ index.php?service=$1&title=$2 [L,NC]

如果我在http://localhost/service/12/This-is-text的{​​{1}}中运行了$_GET

index.php

答案 1 :(得分:0)

你不能使用之前的重写规则中的特殊持有人(1美元,2美元......)来重写。

将您的代码更改为:

RewriteRule ^service/(.*)/(.*)$ index.php?service=$1&title=$2 [NC,L]

RewriteCond %{QUERY_STRING}  (?:^|&)service=([0-9]+)(&|$) [NC]
RewriteCond %{QUERY_STRING}  (?:^|&)title=([a-z]+)(&|$) [NC]   
RewriteRule ^index.php$ /service/%1/%3? [L,R=301]