Apache mod_rewrite:仅当不在本地主机中时才强制 www

Posted

技术标签:

【中文标题】Apache mod_rewrite:仅当不在本地主机中时才强制 www【英文标题】:Apache mod_rewrite: force www only if not in localhost 【发布时间】:2012-05-01 03:49:20 【问题描述】:

我的 htaccess 中有以下内容来强制 URL 中的 www:

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

如果不在本地主机上,我如何只应用它?我可以提出某种 if 条件吗?现在,我得到这样的东西:http://www.localhost/ ...

【问题讨论】:

【参考方案1】:

如果您使用的是 80 以外的端口(例如 localhost:8080),您可能还需要将其添加到正则表达式中:

RewriteCond %HTTP_HOST !^localhost(?::\d+)?$ [NC]
RewriteCond %HTTP_HOST !^127\.0\.0\.1(?::\d+)?$

【讨论】:

【参考方案2】:

我添加了所有这些:

RewriteCond %HTTP_HOST !=localhost
RewriteCond %HTTP_HOST !=127.0.0.1
RewriteCond %REMOTE_ADDR !=127.0.0.1
RewriteCond %REMOTE_ADDR !=::1

【讨论】:

【参考方案3】:

RewriteCond 已经是您的“如果条件”。只需添加另一个:

RewriteCond %HTTP_HOST !=localhost
RewriteCond %HTTP_HOST !^www\.
RewriteRule ^(.*)$ http://www.%HTTP_HOST/$1 [R=301,L]

【讨论】:

或者使用 RewriteCond %REMOTE_ADDR !127.0.0.1 作为替代。 RewriteCond %REMOTE_ADDR !=127.0.0.1 准确地说! 如果启用了 IPv6,localhost 可能会解析为 ::1,因此您可能需要添加:RewriteCond %REMOTE_ADDR !=::1 这里为什么不能使用空间? != localhost

以上是关于Apache mod_rewrite:仅当不在本地主机中时才强制 www的主要内容,如果未能解决你的问题,请参考以下文章

本地 Apache 服务器 mod_rewrite/pretty links 问题

Apache Mod_Rewrite 不断重定向

apache mod_rewrite 模块未安装

Ubuntu系统启用Apache Mod_rewrite模块

Debian/Ubuntu下安装Apache的Mod_Rewrite模块的步骤

Apache如何开启Mod_rewrite模块以及PHPWind伪静态(全伪)