mod_rewrite 将所有 80 流量写入 443 ,但有例外

mod_rewrite 将所有 80 流量写入 443 ,但有例外

我有一个在 443 和 80 上运行的虚拟主机。在 80 虚拟主机上我有一条这样的规则。

        Redirect permanent / https://localhost

我正在测试在 /autos 中提供静态页面,我希望此流量不使用重定向规则,我希望此页面从 80 vhost 提供,而无需 SSL。所以我尝试设置 RewriteCond,然后为 cond 设置 RewriteRule。

        RewriteCond %https://localhost !/autos$
        RewriteRule !^/var/www/autos - [C]

这不起作用,因为我可能做错了。有什么建议吗?

答案1

我使用了两个 vHost 定义 - 一个用于 http,一个用于 https。对于 plone,我使用这个:

  RewriteEngine On
  RewriteRule ^/webalizer(.*) /webalizer$1 [PT]
  RewriteRule ^/(.*) http://127.0.0.1:9673/VirtualHostBase/http/www.domain.tld:80/zope/VirtualHostRoot/$1 [L,P]

但也许在 https-vHost 中这也就足够了:

Redirect permanent /autos http://www.domain.de/autos

韋斯

答案2

您有两种可能性:

1)在端口 80 VirtualHost 上设置重定向,忽略子文件夹 autos:

RewriteEngine On
RedirectMatch 301 ^((?!(autos)).)*$ https://your-domain.ain/

注意:这不会保留 URL 中的路径。因此http://your-domain.ain/path/to/sth将被重定向至https://your-domain.ain/

2)在我看来,更好的解决方案是为子文件夹 autos 创建一个自己的 VirtualHost。

<VirtualHost *:80>
  ServerName autos.yourdomain.ain
  DocumentRoot /var/www/autos
  ServerAdmin [email protected]

  # Write a seperate log per Virtualhost
  CustomLog /var/log/apache2/autos.access_log combined
  ErrorLog /var/log/apache2/autos.error_log

  # Maybe you want to put some restrictions on the directory
  <Directory /var/www/autos>
    Options -Indexes +FollowSymLinks + Includes
    AllowOverride All
    # Restrict Access to certain IP's (change IP to a real IP or comment out)
    Order Deny,Allow
    Deny from All
    Allow from 127.0.0.1 IP IP IP
    Satisfy ALL
  </Directory>
</VirtualHost>

你可以找到更多信息在 Apache VirtualHosts 和一些例子在 Apache 手册中。

编辑:对于单独的 VHOST,您需要使用 NameVirtualHost。确保您的 Apache conf 中有以下条目:

NameVirtualHost *:80
Listen 80
NameVirtualHost *:443
Listen 443

相关内容