【问题标题】:Rewrite Rule in .htaccess file not working for subdomain to main domain.htaccess 文件中的重写规则不适用于子域到主域
【发布时间】:2021-01-29 00:18:23
【问题描述】:

基本上,我工作的公司有一个网站,该网站托管多个不同商店的页面。每个商店在 cpanel 中都有自己的子域规则,以便用户可以从传单中输入一个简单的 url 以访问其本地商店的站点。不过最近,Bing 已经开始索引我们的一个子域,这给我们的客户带来了一些困惑,因为链接显示为 https://[citystate].example.com/find-us/altstate/altcity

我已经查看了几个文件,并且已经到了这一点,据我所见,应该可以工作但没有。

RewriteCond %{HTTP_HOST} ^[citystate]\.example\.com
RewriteRule ^(.*)$ https://example\.com\/$1 [L]

有人可以帮忙解决我哪里出错了吗?

更新:上面的部分正在运行,但 URL 被重定向到索引页面,因为该页面正在出现,就好像它不存在一样。但是,如果我获取链接并在单独的浏览器窗口/选项卡中打开它,它会拉起。让我感到困惑。

【问题讨论】:

  • 好的。所以我发现我需要这幅作品来捕捉这个网站并改变它的方向。 RewriteCond %{HTTP_HOST} ^[citystate]\.example\.com RewriteRule ^(.*)$ example\.com/$1 [L] 但是,URL 的结尾部分被删除,站点默认为索引页。有没有办法传递 example.com/[all of this] 之后的 URL 块?编辑:试图格式化评论以提高可读性
  • 请编辑您的问题以包含此附加信息。除非代码格式正确,否则缺少特殊字符且难以阅读。
  • @MrWhite,更新了重写条件和重写规则。
  • “URL 的结尾部分被删除,站点默认为索引页面” - 您更新的代码示例已经这样做了。也许您与.htaccess 文件中的其他指令有冲突?请在您的问题中包含.htaccess 文件的内容,并附上这些指令。
  • @MrWhite,你是对的。未找到文件时设置的重写条件将其还原到索引页。现在没有意义的是该 URL 有效,但如果以这种方式重定向,它将无法拉出页面。 (FROM) example.com/find-us/state (TO) example.com/find-us/state 如果我用这个链接打开网站,它可以工作,但不能通过重定向。

标签: .htaccess redirect subdomain


【解决方案1】:
RewriteCond %{HTTP_HOST} ^[citystate]\.example\.com
RewriteRule ^(.*)$ https://example\.com\/$1 [L]

此规则需要靠近您的 .htaccess 文件的顶部以避免与其他指令冲突。

但是,有几个潜在的问题:

  • 正则表达式 sn-p [citystate] 仅匹配字符类中的单个字符。 [] 表示字符类。所以这匹配 citystae - 仅一个字符。您需要按字面意思指定单词,不带方括号。但是,如果您有许多“城市”,那么这需要为每个城市制定一个规则,您可以使正则表达式更通用以匹配任何城市。例如。 [a-z]+(即,az 范围内的 1 个或多个小写字母。)

  • 您缺少RewriteRule 上的R (redirect) 标志。例如。 [R,L][R=301,L]。但是,由于您在目标 URL 上指定了方案 + 主机名,它将隐式触发 302(临时)重定向 - 这没关系。但是,为了解决 Bing 问题,这需要是 301(永久)重定向。但是,请先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。

小问题:

  • ^(.*)$ - 正则表达式默认是贪婪的,所以 ^$(字符串的开始和结束)锚是多余的。

  • RewriteRule替换中不需要反斜杠转义文字点和斜线,因为这是一个“普通”字符串,而不是正则表达式。

请尝试以下方法:

RewriteCond %{HTTP_HOST} ^[a-z]+\.example\.com
RewriteRule (.*) https://example.com/$1 [R=301,L]

如果 $1 反向引用未正确捕获 URL 路径,则可以改用 REQUEST_URI 服务器变量。例如:

RewriteCond %{HTTP_HOST} ^[a-z]+\.example\.com
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]

请注意,REQUEST_URI 服务器变量包含一个斜杠前缀,因此 substitution 字符串中省略了它。

【讨论】:

  • 你就是那个男人!事实证明,我需要像您提到的那样在文件中的更高位置添加该片段,并且效果很好。解决了
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 2010-09-26
  • 2011-11-21
  • 2012-07-31
  • 1970-01-01
  • 2013-05-23
  • 2015-04-04
  • 1970-01-01
相关资源
最近更新 更多