我想重定向
http://m.example.com/?url=http://www.example.com/directory/page.html
到
http://www.example.com/directory/page.html(始终是' url ='的值)
我想在我的主网站上投放我的网站的移动版本。现在搜索结果包含我的移动页面。在主要的响应式页面被抓取之前,我想强制它们被查看。
答案 0 :(得分:1)
正如问题评论中所述,您的传入网址无效。查询参数(值)必须进行url编码才能生效:http://m.example.com/?url=http%3A%2F%2Fwww.example.com%2Fdirectory%2Fpage.html
。虽然在大多数情况下可能无效的URL会起作用。
这应该可以满足您的需求:
RewriteMap unescape int:unescape
RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*)url=http(s?)%3A%2F%2F([^%]+)%2F([^&]+)(&?.*)$
RewriteRule ^ http%2://%3/${unescape:%4}?%1%5 [R=301,END]
请注意,RewriteMap
指令只能在动态配置文件中的http服务器主机配置 中使用。如果您需要使用这样的文件(请参阅下面的一般说明),您必须将上述内容分成两个单独的部分:
在http服务器(虚拟)主机配置中:
RewriteMap unescape int:unescape
在动态配置文件中:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^(.*)url=http(s?)%3A%2F%2F([^%]+)%2F([^&]+)(&?.*)$
RewriteRule ^ http%2://%3/${unescape:%4}?%1%5 [R=301,END]
如果你不希望将任何http GET
参数移交给最终的重定向目标,那么上面的内容可以简化:
RewriteMap unescape int:unescape
RewriteEngine on
RewriteCond %{QUERY_STRING} url=http(s?)%3A%2F%2F([^%]+)%2F([^&]+)
RewriteRule ^ http%1://%2/${unescape:%3} [R=301,END,QSD]
一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。