忽略两个特定URL的HTTPS重定向

时间:2014-03-09 13:10:21

标签: mod-rewrite https apache2

您好我有一个带有SSL证书的负载均衡器和两个网络服务器。 loadbalancer将HTTP流量移植到端口80,将HTTPS流量移植到端口81.使用 HTTP:X-Forwarded-Proto 标头,使用apache重写重定向所有对HTTP的请求。这工作正常,但现在我们需要忽略两个特定的REQUEST_URI,但我似乎无法按预期工作。

应用程序正在使用基本的MVC结构,因此所有URIS都被发送到index.php文件,但是当我尝试确保两个URL仅在HTTP上时,我尝试过的组合要么在路由中结束,要么发现或陷入重定向循环。

以下是我尝试过的重写和组合。

    RewriteEngine On

    # This causes route to not be found
    #RewriteCond %{REQUEST_URI} ^/uritoignore/one$ [OR]
    #RewriteCond %{REQUEST_URI} ^/seconduritoignore/two$ 
    #RewriteRule ^(.*)$ http://%{HTTP_HOST}/index.php?url=$1 [QSA,L]


    # Continuous redirect loop
    #RewriteCond %{REQUEST_URI} ^/uritoignore/one$
    #RewriteRule ^(.*)$ http://%{HTTP_HOST}/uritoignore/one [QSA,L]



    # Redirect rest of traffic to HTTPS if not already 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]


    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

非常感谢任何建议。

由于

1 个答案:

答案 0 :(得分:0)

最后,我意识到脸上盯着我的是什么。我只需要从重定向中排除路径,并且还需要index.php来阻止它在最后重写时被重定向。最终配置如下:

RewriteEngine On

# Redirect rest of traffic to HTTPS if not already
RewriteCond %{REQUEST_URI} !^/uritoignore/one
RewriteCond %{REQUEST_URI} !^/seconduritoignore/two
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]