我有以下 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?