当服务器使用permredirect保护时,从SSL中排除Apache服务器上的文件?

我有一个在Ubuntu服务器上运行的Apache 2 Web服务器。 我将整个服务器redirect到启用了以下站点的SSL:

<VirtualHost *:80> ServerName hda.surfrock66.com/ Redirect permanent / https://hda.surfrock66.com/ </VirtualHost> 

我有一个令人讨厌的php文件,它能够从无法validationSSL的应用程序上传数据。 有没有一种方法来禁用一个单一的网站上的单个文件的ssl,也许与.htaccess什么的? 我已经阅读了关于这个问题的广泛的文章,而且他们都没有工作,所以我坚持从头开始寻求帮助。

谢谢!

当然,只要使用mod_rewrite的RewriteCond从redirect中排除特定的path即可。 我一直这样做,以支持让我们通过HTTPencryptionACME请求,但将其他所有内容redirect到HTTPS(并让HTTPS虚拟主机公布HSTS,以便客户受益)。

但是,我不明白你的用例。 PHP脚本真的不应该关心运输。

在你的<VirtualHost>容器中尝试像这样的东西,而不是那个Redirect节:

 RewriteEngine on RewriteCond %{REQUEST_URI} !^/excluded/url.php$ RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [last,redirect=301] 

这将通过HTTPS将除了 /excluded/url.php 之外的所有内容/excluded/url.php到同一主机名上的相应位置(使用301 Moved Permanently响应代码)。 使用%{HTTP_HOST}而不是明确的主机名意味着相同的configuration片段可以在任何虚拟主机容器中使用(我有我的一个单独的片段文件,我Include在一些虚拟主机,大量减less重复的configuration文件)。

是的,这有点复杂,但也是多function的。 请注意, RewriteCond的参数是一个正则expression式; 在这里加上前缀! 因为我们正在颠倒它的意义。 (应用RewriteRule的条件是RewriteCond 匹配,因此不包括该位置。)

另外,请确保在<VirtualHost>容器中有一个指向文件系统中正确位置的DocumentRoot 。 否则,redirect可能会按照需要工作,但不一定会find该文件(取决于其他configuration值)。

mod_rewrite文档