重定向到https时忽略htaccess中的特定文件

时间:2015-03-04 20:17:40

标签: .htaccess mod-rewrite redirect https

我已经尝试了很多组合,并浏览了这个网站的例子,但我尝试的似乎都没有,

我的客户端网站上存储了一个电子邮件图像,默认情况下所有页面都通过https重定向,但这会在发送带有存储在服务器上的图像的html电子邮件时出现问题,我有一个允许我忽略的部分给定文件夹,以便它们不会通过index.php推送给我一个我可以测试并做其他事情的区域,但即使这些也是通过https发送的,

有没有办法忽略单个文件或htaccess中阻止通过https发送的目录?

这就是我现在的位置,此刻我花了一个小时试图解决这个问题,所以请任何帮助表示赞赏

RewriteEngine on
#This is the directory I wish to be ignored:
RewriteCond %{REQUEST_URI} !^(.*/)?email/image/\.png$ [NC]
#Dont send these requests to index.php:
RewriteRule ^(ajax|test)($|/) - [L]
RewriteBase /
RewriteRule ^m/([^/\.]+)/?$ index.php?module=$1 
RewriteRule ^a/([^/\.]+)/?$ index.php?action=$1 
RewriteRule ^m/([^/\.]+)/([^/\.]+)/?$ index.php?module=$1&page=$2 [L]
#ErrorDocument 404 /not_found.php

#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*)$ https://example.com/$1 [R=301,L]

提前感谢您提供的任何帮助或指示

1 个答案:

答案 0 :(得分:1)

首先,您需要在路由规则之前发生所有重定向。然后,您只需向重定向到HTTPS的规则添加条件:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_URI} !^(.*/)?email/image/.+\.png$ [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*)$ https://example.com/$1 [R=301,L]

# Dont send these requests to index.php:
RewriteRule ^(ajax|test)($|/) - [L]

RewriteRule ^m/([^/\.]+)/?$ index.php?module=$1 
RewriteRule ^a/([^/\.]+)/?$ index.php?action=$1 
RewriteRule ^m/([^/\.]+)/([^/\.]+)/?$ index.php?module=$1&page=$2 [L]
#ErrorDocument 404 /not_found.php

请注意,重写条件适用于紧随其后的规则。因此,您必须将条件特定匹配到特定规则,方法是将它们放在规则之前。

此外,您的电子邮件图片正则表达式看起来可能不稳定。它只匹配这样的内容:/email/image/.png(例如没有文件名)。