【问题标题】:.htaccess redirect code.htaccess 重定向代码
【发布时间】:2012-12-04 13:37:13
【问题描述】:

我目前对我的 htaccess 文件使用以下代码。它重定向到https://www.example.com

#if not forum.example.com and not ssl then redirect
RewriteCond %{HTTP_HOST} !^forum\. 
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R,L]

#redirect if https://forum.example.com
RewriteCond %{HTTP_HOST} ^forum\.
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ http://forum.%{HTTP_HOST}/$1 [R,L]

我遇到的问题是我去的时候

http://www.example.com

,此代码使其重定向到

https://www.www.example.com 

而不是

https://www.example.com

有人知道我该如何解决这个问题吗?

如果您需要其他信息来提供帮助,请告诉我。

【问题讨论】:

  • www 被添加到第一个重写规则中,而不事先检查是否已经是 URL 的一部分。
  • 不知道正确的代码。
  • 有人可以帮我解决这个问题吗?
  • 我是新来的,但感谢您的指导!我通读了它并接受了最后一个答案

标签: .htaccess redirect url-rewriting


【解决方案1】:

如果满足 2 个否定条件,则执行第一个重写规则:不是 forum 和不是 SSL,但重写总是插入 www,即使它已经在 URL 中。之前没有检查过。

我认为在不修改实际规则的情况下纠正问题的最佳方法是,除了从第一个替换中删除 www 之外,在开头添加另一个规则,如下所示:

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

#if not forum.example.com and not ssl then redirect
RewriteCond %{HTTP_HOST} !^forum\. 
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L] 

#redirect if https://forum.example.com
RewriteCond %{HTTP_HOST} ^forum\.
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ http://forum.%{HTTP_HOST}/$1 [R,L]

添加的规则的作用是将任何不带www 的URL 重写为带www 的URL。然后将生成的 URL 呈现给其他规则。

我不知道最后这两条规则是否按预期工作,我猜他们确实如此。我只是想解决问题中的 www 重复问题。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    相关资源
    最近更新 更多