多条件重写规则

时间:2013-04-16 10:31:33

标签: apache mod-rewrite ssl

我的网站区域需要强制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模式显然解释/包含/ *强制它非SSL ...是否有上述调整允许我强制除上述两个以外的所有内容(但任何依赖,像JS / CSS包括遵循当前的协议)?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您要排除/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>