Apache 重写条件A或(!B和!C)

Apache 重写条件A或(!B和!C),apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我可以在Apache服务器上的.htaccess文件中使用mod\u rewrite。我想要这样的东西: RewriteEngine On RewriteCond %{HTTPS} !on [NC,OR] RewriteCond %{HTTP_HOST} !^example\.com RewriteCond %{HTTP_HOST} !^sub\.example\.com RewriteRule ^/?(.*)$ https://example.com/$1 意思是“如果http或请求除su

我可以在Apache服务器上的
.htaccess
文件中使用
mod\u rewrite
。我想要这样的东西:

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
    ,这绝对不适用于上述代码
    最简单的方法是什么?提前谢谢
您需要将其分为两个不同的规则:

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

嘿,我不想要
www.
,你可以在示例中看到,
http://www.example.com
应重定向到
https://example.com
,但您正在以另一种方式进行。。。R=301需要注意的一点是:只有在完成所有工作后才能使用它,改变它并不容易。GTG,试着用谷歌搜索一下……好吧,所以需要打破两条规则。我建议编辑,这将删除所有子域,而不仅仅是www。看看它。我已经批准了你的编辑。第二条规则,即
http->https
适用于所有域。我知道第二条规则适用于所有域。但是您将第一个文件编辑回仅删除
www.
。(建议的是“如果除
sub.
之外有子域,请将其删除。)虽然这不是我在问题中要求的行为,但可能更好。谢谢你破译我糟糕的英语
:)