【问题标题】:URL rewriting for different protocols in .htaccess.htaccess 中不同协议的 URL 重写
【发布时间】:2011-04-07 17:45:23
【问题描述】:

我需要 .htaccess 中的 url 重写方面的帮助。

所以问题在于不同的协议:https 和 http。重写的主要目的是从 URL 中删除“www”,但协议应保持与以前相同。

例如,当我有像 http://www.domain.com/request 这样的 URL 时,它应该被重定向到 http://domain.com /要求。我用这些规则解决它:

RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

但万一,当 URL 看起来像 https://www.domain.com/request 它应该被重定向到 https://domain.com/request .

不幸的是,上面的规则将重定向到 http 而不管当前的协议。

提前致谢。

【问题讨论】:

  • 感谢您的链接。我在搜索过程中错过了这个问题。不幸的是,这个例子不起作用。它将 https://domain.com/request 重定向到 http://www.domain.com/request,而不是 https://www.domain.com/request。

标签: apache .htaccess mod-rewrite url-rewriting apache2


【解决方案1】:

这与链接的可能重复项非常相似,但由于它强制 www 将其删除,因此可能需要单独的答案。

试试这样的:

RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|off
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$
RewriteRule ^ %1%3%{REQUEST_URI} [R=301,L]

【讨论】:

  • 对上述规则的解释对于寻找 www 到非 www 重定向的人来说绝对是非常有帮助的参考。
  • 说真的,apache API 创建者...为什么不只使用像HTTP_PROTOCOL 这样的变量,并且让第二个参数遵循与所有其他参数相同的模式? RewriteCond %{HTTP_PROTOCOL} ^http$RewriteCond %{HTTP_PROTOCOL} ^https$ 而不是对规则进行例外处理?知识要求越少越好。额外的知识是好的,但额外的必需知识是不好的。你必须知道确切的语法和价值。谁来猜^on(s)|off。可怕的旧 PHP 相关工具...
  • 出色的答案(对有关重定向 www 的 DigitalOcean 文档表示赞赏)尽管为了最大程度地兼容区分大小写 [NC] 应在 RewriteCond 上设置,请参阅 stackoverflow.com/a/5582488/614616
猜你喜欢
  • 2011-02-06
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多