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 问题
Ubuntu系统启用Apache Mod_rewrite模块