我已经尝试了很多组合,并浏览了这个网站的例子,但我尝试的似乎都没有,
我的客户端网站上存储了一个电子邮件图像,默认情况下所有页面都通过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]
提前感谢您提供的任何帮助或指示
答案 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
(例如没有文件名)。