【问题标题】:Redirect non-www to www WITHOUT forcing https将非 www 重定向到 www 而不强制 https
【发布时间】:2018-08-20 09:31:52
【问题描述】:

我有一个客户,他有一个 http SEO 的 wordpress 网站,带有 https AdWords 静态 html 登录页面(我知道 - 不要问)。 他们想 301 所有非 www 到 www。我尝试了以下 htaccess 代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

这非常适合将所有 URL 从非 www 重定向到 www。但是,它也会将所有 https URL 更改为 http。

我怎样才能让所有非www重定向到www,但http和https不受影响。

例如:

http://example.com/seo-page -> http://www.example.com/seo-page

https://example.com/ppc-page -> https://www.example.com/ppc-page

谢谢

美国东部时间: 现有的 .htaccess 是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* - [E=CANONICAL:http://%{HTTP_HOST}%{REQUEST_URI},NE]
RewriteCond %{HTTPS} =on
RewriteRule .* - [E=CANONICAL:https://%{HTTP_HOST}%{REQUEST_URI},NE]
</IfModule>

【问题讨论】:

  • 我想您必须为每种情况分别执行此操作,因为实际上没有办法将此信息作为反向引用或类似 AFAIK 的东西。一个额外的 RewriteCond 检查 HTTPS,在明确重写为 https://... 的规则之前。
  • 谢谢@CBroe。知道怎么做吗?我宁愿不单独执行它们,因为大约有 100 个 https ppc 登录页面 - 以及超过 400 个 http SEO 页面。
  • 在每种情况下,我指的是 HTTP 和 HTTPS,而不是每个单独的 URL ...
  • 好的。如何?我对 .htaccess 的了解相当有限

标签: .htaccess redirect url-redirection


【解决方案1】:

试试这个:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)
RewriteCond %{HTTPS} !=on
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} =on
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

保存.htaccess 并试试这个:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

RewriteCond %{HTTP_HOST} !^(www\.) 
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTPS}:s on:(s)
RewriteRule .* - [E=CANONICAL:http%1://www.%{HTTP_HOST}%{REQUEST_URI},NE]

RewriteCond %{HTTP_HOST} ^(www\.)
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTPS}:s on:(s)
RewriteRule .* - [E=CANONICAL:http%1://%{HTTP_HOST}%{REQUEST_URI},NE]
</IfModule>

【讨论】:

  • 谢谢。我试过了,但它仍然强制 https 页面到 http。
  • 清除所有缓存,包括 CDN。使用此代码,我有以下内容:“example”重定向到“example”。但“example”仍会转到“example”。
  • 粘贴 .htaccess 文件的其余部分
  • 编辑了原始问题
  • @JoshN 看到更新的代码,清除缓存测试吧
【解决方案2】:

如果您使用的是 WordPress,则无需在 .htaccess 文件中添加任何代码。您可以通过在设置中输入 www 或 nonwww url 来重定向整个站点。

登录wp-admin 然后点击设置按钮并访问 第三个字段名称(WordPress 地址 (URL))输入您要重定向网站的 URL。并将相同的 URL 粘贴到 下一个字段名称(站点地址 (URL))

然后点击保存按钮

恭喜您的网站重定向成功。

【讨论】:

  • 谢谢。但如前所述,它是一个混合 WordPress/静态 HTML 站点。这不能解决我的问题。
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多