【问题标题】:htaccess redirect from several subdomains by removing the dothtaccess 通过删除点从多个子域重定向
【发布时间】:2017-05-11 23:50:03
【问题描述】:

我有一组需要在 .htaccess 中重定向的子域。我不擅长 REGEX,并且无法理解我读过的其他帖子以将其应用于这种情况。

我的网站布局如下:

quark.subdomain.site.com
yy.subdomain.site.com
bit.subdomain.site.com
etc

子域可以是任何东西,但子域始终相同。

我需要将它们重定向到:

quarksubdomain.site.com
yysubdomain.site.com
bitsubdomain.site.com
etc

所以基本上,我只需要删除点。

使用这个问题的答案,我能够做到这一点: .htaccess 301 redirect one subdomain to another, for multiple TLDs

但这是单独执行每个子子域:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^quark.subdomain\.(.+)$ [NC]
RewriteRule ^ https://quarksubdomain.%1 [L,R=301]

RewriteCond %{HTTP_HOST} ^yy.subdomain\.(.+)$ [NC]
RewriteRule ^ https://yysubdomain.%1 [L,R=301]

但我有大约 30 个这样的子子域,所以我想要更高效的东西。

1) 有没有一种通配符方法可以用来从子域的任何子域中删除点?

2) 我未能传递 domain.com/ 之后的地址的任何部分。我使用的是 CakePHP,所以 REQUEST_URI 不起作用,因为它给了我 Cake 隐藏的地址信息。不使用 REQUEST_URI 的最佳方法是什么?

为初学者解释 REGEX 特殊字符的链接可获得奖励积分。我想纠正我的无知。

【问题讨论】:

    标签: php apache .htaccess redirect cakephp


    【解决方案1】:

    您不需要从条件中获取请求URI,您可以从重写规则中获取if,并优化您从条件中保留的内容:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(.+)\.subdomain\.site\.com$ [NC]
    RewriteRule (.+) https://%1subdomain.site.com$1 [L,R=301]
    

    奖励点...我不知道,https://regexone.com/ 可能吗?

    【讨论】:

    • 对不起,我应该更清楚。 “quark1 等”可以是任何东西。我需要采用通配符前缀,并将其传递给重写规则。我将编辑我的帖子以增加清晰度。
    • 我编辑了我的答案,如果域的结尾始终相同,则不会有太大变化。
    • 由于某种原因,该代码对我不起作用。它似乎与重写条件不匹配。明天我会玩它,看看它是不是我做的不对。我会看看 Regexone 上的练习。
    【解决方案2】:

    经过反复试验,我终于成功了:

    RewriteCond %{HTTP_HOST} ^(.+)\.subdomain\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%subdomain.%2/$1 [QSA,L,R=301]
    

    它正确获取任何前缀并将其附加到子域名,并正确传递 .com/ 后面的位置。我还让它对域不敏感,所以它也可以在我的开发域上本地工作。

    但我不能给自己任何奖励积分,因为我仍然无法解释为什么必须以这种方式传递特定的页面地址。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-08
      • 2016-06-28
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      相关资源
      最近更新 更多