从一个静态 URL 重定向或重写到另一个静态 URL

Posted

技术标签:

【中文标题】从一个静态 URL 重定向或重写到另一个静态 URL【英文标题】:Redirect or rewrite from one static URL to another static URL 【发布时间】:2018-06-27 02:49:57 【问题描述】:

我想将一个静态 URL 重定向到另一个静态 URL,但做不到。

我要重定向的网址:

http://www.eyecatchers.co/blogdetail.php?id=24%2FWHY-YOUR-WEBSITE-IS-THE-NERVE-CENTER-OF-YOUR-ONLINE-MARKETING-%E2%80%93-AN-EYECATCHERS%E2%80%99-TAKE%E2%80%A6..%2F

到这里:

http://www.eyecatchers.co/blog/WHY-YOUR-WEBSITE-IS-THE-NERVE-CENTER-OF-YOUR-ONLINE-MARKETING-AN-EYECATCHERS-TAKE

我曾尝试使用301 重定向,但无能为力。也试过这个:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^blogdetail.php?id=24%2FWHY-YOUR-WEBSITE-IS-THE-NERVE-CENTER-OF-YOUR-ONLINE-MARKETING-%E2%80%93-AN-EYECATCHERS%E2%80%99-TAKE%E2%80%A6..%2F http://www.eyecatchers.co/blog/WHY-YOUR-WEBSITE-IS-THE-NERVE-CENTER-OF-YOUR-ONLINE-MARKETING-AN-EYECATCHERS-TAKE [R=301,L]

这也不起作用。

【问题讨论】:

【参考方案1】:

? 之后的 URL 部分代表一个查询字符串。在 RewriteRule 的模式中,您无法匹配 Query string。您需要匹配%QUERY_STRING 或使用THE_REQUEST 变量的完整请求标头。

 RewriteEngine on

RewriteCond %THE_REQUEST /blogdetail.php\?id=.+WHY-YOUR-WEBSITE-IS-THE-NERVE-CENTER-OF-YOUR-ONLINE-MARKETING.+ [NC]
RewriteRule ^ http://www.eyecatchers.co/blog/WHY-YOUR-WEBSITE-IS-THE-NERVE-CENTER-OF-YOUR-ONLINE-MARKETING-AN-EYECATCHERS-TAKE? [R=301,L]

【讨论】:

对不起,它不起作用,它给了我 500 内部服务器错误 为避免混淆,我将所有特殊的 uri 字符替换为 .+ 。请尝试更新后的规则。 对不起,这也不起作用,给我同样的 500 服务器错误 抱歉,有一个小错误。【参考方案2】:

试试:

RewriteEngine on
RewriteCond %THE_REQUEST /blogdetail.php\?id=([^\s]+) [NC]
RewriteRule ^ /blog/%1? [R=301,NC,L,R]

这将处理所有此类链接,即 /blogdetail.php?id= 将被简单地替换为 /blog/

【讨论】:

您的规则会将http: //www.eyecatchers.co/blogdetail.php?id=24%2FWHY-YOUR-WEBSITE-IS-THE-NERVE-CENTER-OF-YOUR-ONLINE-MARKETING-%E2%80%93-AN-EYECATCHERS%E2%80%99-TAKE%E2%80%A6..%2F 重定向到http: //www.eyecatchers.co/blog/24%2FWHY-YOUR-WEBSITE-IS-THE-NERVE-CENTER-OF-YOUR-ONLINE-MARKETING-%E2%80%93-AN-EYECATCHERS%E2%80%99-TAKE%E2%80%A6..%2F 哦,我还以为是FROM链接里有些字符,错了,我的错! 感谢您的回复。但现在的问题是 /blogdetail.php?id= 将被简单地替换为 /blog/ ,如何从该链接中删除 24%2F 应该是 eyecatchers.co/blog/… 是的,请参考@starkeen 的***.com/a/48314516/945214。我的解决方案适用于所有普通 URL,并且是通用的。

以上是关于从一个静态 URL 重定向或重写到另一个静态 URL的主要内容,如果未能解决你的问题,请参考以下文章

什么是伪静态,url 重写是截取传入web 请求并自动将请求重定向到其他 url

单击时,如果服务器速度慢,则重定向到另一个 URL?

IIS7 或 .Net 301 从一个域重定向到另一个域

使用 Google App Engine 将所有请求从一个域重定向到另一个域,但在 yaml 中保留静态路由规则

Next JS 静态站点:将特定路由重定向到另一个站点?

htaccess 重定向 301 + 重写冲突