.htaccess 重定向,从旧的脏 URL 到带有参数的干净的新 URL

.htaccess 重定向,从旧的脏 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(包括参数charity_id& project_id)。

我正在尝试学习 .htaccess 规则,但发现网上的教程有点模糊。

我真的很想对 .htaccess 规则进行简单的解释。

(授人以鱼,不如授人以渔,授人以渔,养活他一生)。

正确答案将是带有简单且实用的解释的答案(如果可能的话,还附带规则!)。

答案1

要学习设置 .htaccess 规则,您至少需要一些正则表达式技能,并有信心使用 mod_rewrite Apache 模块,因为它的灵活性可以方便地构建重写规则。

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

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 版本,如果适用,请选择不同的版本)是一个有用的参考,因此您必须从它开始,甚至是为了更好地理解上面的代码。

您可以将 视为RewriteRule重写的基石,因此每条规则至少会使用一次。RewriteCond当您需要检查环境变量或引用查询字符串值时,您将在 之前 添加,就像在我们的代码中一样。

要将反向引用放入来自前一个的替换字符串中,RewriteCond您将使用从%1到的%9 值;如果您需要从其自身第一部分进行反向引用RewriteRule,您将使用$1$9

请注意替换 URL 末尾的问号,因为它是跳过查询字符串的方式;如果缺失,您将?charity_id=885&project_id=18111在新 URL 末尾看到。

答案2

在另一篇文章中,sysadmin1138 对 mod rewrite 进行了非常好的介绍。

您可以找到该帖子这里

/编辑:例如:

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?

相关内容