【问题标题】:Multi-condition rewrite rules多条件重写规则
【发布时间】:2013-04-08 17:21:44
【问题描述】:

我有一个站点,其中一些区域需要强制 SSL 模式,然后在其余部分强制为非 SSL。

我从以下规则开始:

<VirtualHost *:80>
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteRule ^/tourism/bookings/(.*) https://%{SERVER_NAME}/tourism/bookings/$1 [R,L]
  RewriteRule ^/?bookings/(.*) https://%{SERVER_NAME}/bookings/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
  RewriteEngine On
  RewriteCond %{REQUEST_URI} !^/bookings
  RewriteCond %{REQUEST_URI} !^/tourism/bookings
  RewriteRule (.*) http://%{SERVER_NAME}$1 [L,R,QSA]
</VirtualHost>

现在,上述工作 - 但 SSL 模式显然解释 /includes/* 以强制它为非 SSL...是否对上述内容进行了调整以允许我强制除上述两个内容之外的所有内容(但任何依赖,比如 JS/CSS 包括遵循当前协议)?

提前致谢

【问题讨论】:

    标签: apache mod-rewrite ssl


    【解决方案1】:

    如果您想排除除/bookings/tourism/bookings 之外的其他内容,则只需在条件中排除它们即可。

    此外,您不需要 RewriteCond %{HTTPS} !=on 条件,因为该虚拟主机始终是非 HTTPS:

    <VirtualHost *:80>
      RewriteEngine On
      RewriteCond %{REQUEST_URI} !\.(css|js)$ [NC]
      RewriteRule ^/tourism/bookings/(.*) https://%{SERVER_NAME}/tourism/bookings/$1 [R,L]
      RewriteCond %{REQUEST_URI} !\.(css|js)$ [NC]
      RewriteRule ^/?bookings/(.*) https://%{SERVER_NAME}/bookings/$1 [R,L]
    </VirtualHost>
    
    <VirtualHost *:443>
      RewriteEngine On
      RewriteCond %{REQUEST_URI} !^/bookings
      RewriteCond %{REQUEST_URI} !^/tourism/bookings
      RewriteCond %{REQUEST_URI} !\.(css|js)$ [NC]
      RewriteRule (.*) http://%{SERVER_NAME}$1 [L,R,QSA]
    </VirtualHost>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多