RewriteCond A或(!B和!C)

时间:2017-11-23 17:52:13

标签: apache .htaccess mod-rewrite

我可以在Apache服务器上的mod_rewrite文件中使用.htaccess。我想要这样的事情:

RewriteEngine On

RewriteCond %{HTTPS} !on [NC,OR]
RewriteCond %{HTTP_HOST} !^example\.com
RewriteCond %{HTTP_HOST} !^sub\.example\.com
RewriteRule ^/?(.*)$ https://example.com/$1

虽然意味着"如果http或请求子域名不是sub.(例如www.),则重定向到https而不是www. }"

  • https://example.com - >什么都不做
  • http://example.com - > https://example.com
  • https://www.example.com - > https://example.com
  • http://www.example.com - > https://example.com
  • https://sub.example.com - >什么都不做
  • http://sub.example.com - > https://sub.example.com,这绝对不适用于上面的代码 最简单的方法是什么?提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要将其分为两个不同的规则:

RewriteEngine On

# remove www and https for https://www.example.com or http://www.example.com
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=302]

# simply add https for rest
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=302]
  • 确保清除浏览器缓存或使用新浏览器进行测试。
  • 测试后将302更改为301