微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除URL域中的尾随点

如何解决删除URL域中的尾随点

我们具有以下形式的URL:

www.dev-studio.co.uk.

www.dev-studio.co.uk./a-sample-image

借助.htaccess规则,我试图删除域名末尾的结尾点(co.uk .),但失败了。

这是我正在尝试的规则:

RewriteCond %{HTTP_HOST} ^([a-z0-9\.-]+)(\.co\.uk\.)(.*)$
RewriteRule ^ http://www.dev-studio.co.uk/%3 [L,R=302,NE]

但是应该捕获第三组的%3返回为空。

目标是将www.dev-studio.co.uk./a-sample-image重定向www.dev-studio.co.uk/a-sample-image

在这里尝试了所有其他问题,但是解决方案对我不起作用。 任何帮助将不胜感激。

解决方法

RewriteCond %{HTTP_HOST} ^([a-z0-9\.-]+)(\.co\.uk\.)(.*)$
RewriteRule ^ http://www.example.co.uk/%3 [L,R=302,NE]

HTTP_HOST服务器变量仅包含主机名(即Host HTTP请求标头的值),它不包含URL路径,因此%3后向引用为总是空的。

您需要从RewriteRule 模式捕获URL路径。例如:

RewriteRule (.*) http://www.example.co.uk/$1 [R=302,L]

或者,使用REQUEST_URI服务器变量(包含完整的URL路径,包括斜杠前缀)代替:

RewriteRule ^ http://www.example.co.uk%{REQUEST_URI} [R=302,L]

一旦您确认它可以正常工作,那么最终应该是301(永久)重定向。

请注意,由于您要重定向到特定域,是否需要与 any .co.uk主机名匹配的 CondPattern ?您可能是具体的:

RewriteCond %{HTTP_HOST} =www.example.co.uk.
RewriteRule ^ http://www.example.co.uk%{REQUEST_URI} [R=302,L]

CondPattern 上的=前缀将其更改为字典字符串比较(不是正则表达式),因此无需转义点。

如果您希望使用一种完全通用的解决方案从任何请求的主机中删除尾随.(FQDN),则可以执行以下操作:

RewriteCond %{HTTP_HOST} (.+)\.$
RewriteRule ^ http://%1%{REQUEST_URI} [R=302,L]

尽管您可能希望将其与规范的重定向(例如,非www到www / HTTP到HTTPS?)结合使用,以避免多次重定向-尽管它们可能不太可能一次全部发生,所以可能不是问题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。