2013-04-02 55 views
0

我想在我的.htaccess文件中使用mod_rewrite配置动态mod重写规则。我非常接近解决这个问题。我想获得的URL像这样:.htaccess漂亮的URL无法正确显示与重定向

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看起来像这样:

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 

当我加入“指数”它用查询字符串的工作。就重定向而言,我编辑了我的php脚本,并将所有的URL重定向到那里,这很容易。特别感谢mkjasinski指出这一点。在$_GETindex.phphttp://localhost/service/12/This-is-text

+0

你得到一个错误? –

+0

不是。没有错误。漂亮的URL可以工作,但旧的URL不会重定向到它们。导航到旧网址时显示页面,但浏览器不会重定向到漂亮的网页。 – DJSK

回答

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] 

,如果我已经运行

array (size=2) 
    'service' => string '12' (length=2) 
    'title' => string 'This-is-text' (length=12) 
+0

感谢您的回复。我试过你的代码,就像我的漂亮的URL一样。但是,当我尝试使用旧URL导航到页面时,它不会重定向到新的漂亮页面。对不起,我应该更清楚。 – DJSK

+1

@ kyzer1978链接必须建立在应用程序的一面,如果你想重定向任何链接,那么你会得到2个请求。 – mkjasinski

+0

我其实刚刚意识到这一点。然后,我可能会重写我的应用程序中的代码。 Bummer,这将是一大堆工作! – DJSK

0

你不能使用特殊的持有人($ 1,$ 2 ...)先前的重写规则写入rewritecond。

改变你的代码:

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] 
+0

我认为我们快到了。旧的网址正在重定向,但现在他们将转向错误的美丽网址。它们都在这里重定向:'http:// www.mysite.com/service //'查询字符串不会传递到新的URL。 – DJSK

+0

上面的代码应该可以工作 –

+0

现在更接近了。第二个查询字符串正在重写,但不是第一个。我得到这个'http:// www.mysite.com/service/events'或这个'http:// www.mysite.com/service/planning'第一个查询值仍然没有被传递给新的网址。 – DJSK