【问题标题】:htaccess redirect to domain based on string in urlhtaccess 根据 url 中的字符串重定向到域
【发布时间】:2016-01-19 10:47:57
【问题描述】:

我们有一个从 CMS 生成内容的网站。问题是人们在没有http:// 的情况下添加了指向他们网站的链接,因此所有链接都以错误的方式生成。

例如:http://www.example.com/ec/shefaliaxena/eventupdate/www.shefalisaxena.com

我想做的是在最后一个斜杠之后获取数据,并使用正则表达式检查它是否是有效域,如果它是有效域,则将其重定向到该域,否则什么也不做。

我能够使用正则表达式 ([^/]+$) 在最后一个斜线之后提取数据,但想知道如何实现此重定向。

我可以通过编码轻松地做到这一点,但我想从 .htaccess 文件本身处理它,这样它就不会增加服务器的负担。

【问题讨论】:

  • 你试过明显的吗? RewriteRule ([^/]+)$ http://$1/ [L,NC,R=301]
  • 感谢您的评论,我确实尝试过,但此规则会重定向所有请求,我只想重定向那些在最后一个斜杠之后的请求(如果有有效域)。如果它不是一个有效的域,那么它应该简单地向前移动并且不应该做任何事情。
  • 您需要准确确定那里使用了哪些类型的域,以便为其创建良好的表达方式。也就是说,您如何在浏览器中输出网站 URL?您可以随时检查http:// 是否存在,如果不存在,请在页面上显示 URL 之前添加它。这样做可能是最好的,因为您根本不需要重定向。
  • 如果可以的话,你能分享一些例子吗?
  • 我不知道你的链接是怎么生成的。 This answer 可能会为您指明正确的方向。添加前缀后,您可以在页面上回显 URL。

标签: regex .htaccess redirect


【解决方案1】:

您在尝试这样做时可能会遇到的一个问题是,有效文件名通常看起来很像有效域名,因此您需要在尝试之前确保看起来像域名的东西不是有效文件转发网址:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /(([A-Za-z0-9-]+\.)+[A-Za-z]{2,6})$ http://$1/ [L,NC,R=301]

如果您要从用户输入的数据生成 URL,我肯定会考虑在那里添加协议而不是这样做。

【讨论】:

  • 感谢凯文,他真正帮助并解决了我的问题。向你致敬。
猜你喜欢
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多