.htaccessredirect,从旧的脏URL到一个干净的新的URL与参数

我有以下2个链接,我用.htaccess规则还不是很好。

Old URL: http://www.mywebsite.org.uk/donate/donate.php?charity_id=885&project_id=18111 New URL: http://new.mywebsite.org.uk/donation/to/885/18111 

我想要从旧url到新url的所有stream量(包括参数charity_idproject_id )。

我试图学习.htaccess的规则,但在网上find的教程有点模糊。

我真的很喜欢.htaccess规则的一个简单的解释。

(给一个人一条鱼,喂他一天, 教一个人钓鱼,养活他一辈子 )。

正确的答案将是一个简单而有用的解释(如果可能的话还有规则!)。

为了学习设置.htaccess规则,你至less需要一些正则expression式技巧,并且有信心使用mod_rewrite Apache模块,因为它灵活地构build了重写规则。

如果是这样,你的代码可以像

 RewriteEngine On RewriteCond %{QUERY_STRING} ^charity_id=([0-9]+)&project_id=([0-9]+)$ RewriteRule donate/donate.php http://new.mywebsite.org.uk/donation/to/%1/%2? [L,R=301] 

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html (对于2.4 Apache版本,如果适用的话,select一个不同的版本)是一个有用的参考,所以你必须从它开始,即使为了更好了解上面的代码。

你可以把RewriteRule看作是重写的砖块,所以每个规则至less会使用一次。 当您需要检查环境variables或引用查询string值时,您将在RewriteCond之前添加,就像在我们的代码段中一样。

要把一个反向引用放到前一个RewriteCondreplacestring中,你将使用从%1%9值; 如果你需要从RewriteRule本身的第一部分反向引用,你将使用$1$9

注意replaceurl结尾处的问号标记,因为这是跳过查询string的方式; 如果缺less,您将在新url的末尾添加?charity_id=885&project_id=18111

在另一篇文章中,sysadmin1138写了一个很好的介绍到mod重写。

你可以在这里find这个post。

/编辑:例如:

 old: http://example.com/path?var=val new: http://example.com/path/var/val 

的.htaccess

 RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$ RewriteRule ^/path /path/%1/%2?