2012-08-28 224 views
1

我有以下形式的网址:的.htaccess重定向正常的URL查询字符串

www.example.com/r/abc/1234 

,我想重写:

www.example.com/r.php?deb=abc&id=1234 

有一个URL:

www.example.com/r/12bcd-qsqs-343-wdwd/1234 

应改写为:

www.example.com/r.php?abc_id=12bcd-qsqs-343-wdwd&id=1234 

这两个规则都应该由.htaccess来处理。有什么建议么?

+0

通过所有到您自己的脚本,比PHP脚本程序的URI作为一个参数里面。这对于您正在运行的Web服务器来说并不那么具体,并且更加灵活。这通常只需要一个或很少的规则。比较:[symfony2重写规则.htaccess app.php](http://stackoverflow.com/questions/11149526/symfony2-rewrite-rules-htaccess-app-php) – hakre

回答

1

这两个你想重定向的URI看起来都差不多,除了第二个在第一个查询参数中有连字符-

启用mod_rewrite的,并通过httpd.conf的.htaccess,然后把这个代码在你.htaccessDOCUMENT_ROOT目录:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^r/([^-]+)/(.+)/?$ r.php?deb=$1&id=$2 [L,QSA] 

RewriteRule ^r/([a-z0-9-]+)/(.+)/?$ r.php?abc_id=$1&id=$2 [L,QSA,NC] 
+0

感谢您对我所做的小改动提供的帮助,但现在问题在于它在我的本地主机上工作,但是当我将它转移到服务器上时,我正在运行虚拟主机它不起作用,您能帮忙吗? –

+0

在服务器上确认.htaccess已启用,然后在DOCUMENT_ROOT目录中正确调节.htaccess。如果一切正常,则在上面的2个RewriteRule行中添加'R'标志以查看服务器上的最终URI。 – anubhava

+0

非常感谢:)有什么我可以跟你保持联系的任何社交网站或任何东西? –

1

试着这么做:

RewriteRule (.*)/(.*)/(.*)$ path_to_php_files/$1.php?deb=$2&id=$3 [QSA,L,NC] 

不幸的是这条规则,你将拥有第一个$ _GET参数总是DEB,我希望你有DirectoryIndex的设置corectly。我不认为这对

www.example.com/r/abc/1234 
www.example.com/r/12bcd-qsqs-343-wdwd/1234 

可以delivrer的ABC和12bcd-qsqs-343-wdwd 2个不同的$ _GET参数,如果你有动态链接。

+0

将无法​​正常工作,因为RewriteRule不匹配开始斜杠'/'。 – anubhava

+0

是的,谢谢,我删除了它,但它应该可以工作。 – Cosmin

+0

其实如果你注意到OP想用两种不同的查询参数以两种不同的方式重定向。 – anubhava

相关问题