【问题标题】:Redirect from non-www http to https with www使用 www 从非 www http 重定向到 https
【发布时间】:2016-10-15 13:14:49
【问题描述】:

我正在尝试同时将我们的旧网站从 http 重定向到 https 以及从非 www 重定向到 www。我们目前有很多我们多年来获得的非 www 和 http 版本网站的链接,我想减少重定向的数量,因为不想被“链接果汁”稀释。我们也有来自 https// 非 www 和 http//www 的链接:/

目前重定向架构如下所示:

http://domain.com/oldpage.html
301 永久移动
https://domain.com/oldpage.html
301 永久移动
https://www.domain.com/newpage.html
200 OK

是否有一种解决方法可以减少一个 301 重定向? 例如像这样:
http//domain.com/oldpage.html -> 到https://www.domain.com/newpage.html

【问题讨论】:

  • 当然,这完全有可能。

标签: apache http redirect mod-rewrite https


【解决方案1】:

这就是你想要的 .htaccess

只有 1 个重定向,无论它是不安全的 (http)、apex (www-less) 还是两者兼有:

# canonical redirect http → https ( with optional www complection)
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com [NC]
RewriteRule ^/?(.*) https://www.example.com/$1 [L,R=301]

# https:// apex →  https:// www.*
RewriteCond %{HTTP_HOST} ^(?!www\.)example.com [NC]
RewriteRule ^/?(.*) https://www.example.com/$1 [L,R=301]

【讨论】:

  • 如果您的解决方案是通用的(没有在其中硬编码域),那就太好了。
【解决方案2】:
   NameVirtualHost *:80
   <VirtualHost *:80>
   ServerName example.com
   ServerAlias www.example.com
   RedirectPermanent / https://www.example.com
   </VirtualHost>

   <VirtualHost *:80>
   ServerName example.net
   ServerAlias www.example.net
   DocumentRoot /var/www/html/example.net
   RedirectMatch "old-page$" "https://www.example.com/new-page”
   </VirtualHost>

   <VirtualHost *:443>
   ServerName www.example.com
   ...
   </VirtualHost>

参考:https://wiki.apache.org/httpd/RedirectSSL

【讨论】:

    【解决方案3】:

    是的,这很容易理解 在与首选形式匹配的任何请求 URL 上运行正则表达式,即

    https://www.

    就像在 javascript /^https:\/\/www\..*$/.exec(url) 如果这返回非空值 这意味着网址遵循 https 和 www 表单

    如果其中一个不符合您的规则,例如 http 或非 www url 或所有这些 解析网址并提取路径,然后将其附加到您的完美网址

    var redirectURL = "https://www.yourDomain.com"+path;
    

    然后将重定向请求发送到这个完美的形式。

    来自这个请求:

    http://yourDomain.com/something

    重定向到新网址

    https://www.yourDomain.com/something

    仅在一个重定向响应中

    【讨论】:

    • 非常感谢你们俩。这也适用于另一个 .domain 吗?我们有另一个使用另一个域结尾的组级站点。我们想通过一个重定向将一些页面传递到当前站点。这是否意味着我们可以在群组网站上使用这样的设置。 ServerName domain.a ServerAlias www.domain.a 重定向永久/domain.b 然后指定站点b上的组url。用一个简单的。重定向 301 /old-page/ domain.b/new-page
    • 更简单的方法是:在您想要重定向的已知页面上的 .a 域中,只需提取路径并将其附加到完美前缀“domain.b"+path 并要求重定向到这个完美的 URL,即使你可以如果路径不同,则将路径更改为 .b 服务器中的相应路径
    猜你喜欢
    • 2018-09-26
    • 1970-01-01
    • 2015-10-23
    • 2013-07-01
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多