301将非www重定向到www

Posted

技术标签:

【中文标题】301将非www重定向到www【英文标题】:301 redirect non-www to www 【发布时间】:2018-05-01 11:51:09 【问题描述】:

我正在尝试将我网站上的所有non-www 重定向到www!我的 SSL 已配置为将所有 http 重定向到 https,但我发现的所有内容仅对我部分有效!

如果我输入mysite.com/en/articles/12/how-to-code,例如我被重定向到 www.mysite.com/index.php 应该是 www.mysite.com/en/articles/12/how-to-code

我已经尝试过解决这个SO question,我知道这个问题可能会重复,但其他解决方案对我不起作用!我正在使用 apache2。

这是我在 /public 文件夹中的 .htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %HTTP:Authorization .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]

    # Redirect to www
    RewriteCond %HTTP_HOST ^[^.]+\.[^.]+$
    RewriteCond %HTTPSs ^on(s)|
    RewriteRule ^ http%1://www.%HTTP_HOST%REQUEST_URI [L,R=301]
</IfModule>

提前致谢

【问题讨论】:

【参考方案1】:

改变顺序,重写前重定向:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Redirect to www
    RewriteCond %HTTP_HOST ^[^.]+\.[^.]+$
    RewriteCond %HTTPSs ^on(s)|
    RewriteRule ^ http%1://www.%HTTP_HOST%REQUEST_URI [L,R=301]

    # Handle Front Controller...
    RewriteCond %REQUEST_FILENAME !-d
    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %HTTP:Authorization .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
</IfModule>

因为如果你在重写 URL 后重定向,这是重定向请求将被修改并返回的最后一个版本。

【讨论】:

感谢克罗斯!您刚刚获得了 50 分!大声笑现在请你解释为什么它按这个顺序工作但在我放置的另一个中不起作用?也许就像你的答案的更新。 有人可以帮我解答***.com/questions/47475677/…中的问题

以上是关于301将非www重定向到www的主要内容,如果未能解决你的问题,请参考以下文章

也将非 www 重定向到 www 子页面

将非www重定向到www的最佳方法?

将非 www 重定向到 www 以获取 https

NGINX 将 http 重定向到 https,将非 www 重定向到 ww

将非 WWW 重定向到 WWW 格式并重定向到 VirtualHost 中的 HTTPS

Nginx:在 https 上将非 www 重定向到 www