Apache重写规则-除localhost和环回之外的所有内容
我有一个服务器,我想强制与外界进行https通信,但是,服务器上有一些服务需要本地服务器上的进程通过http访问 我尝试了以下方法:Apache重写规则-除localhost和环回之外的所有内容,apache,mod-rewrite,Apache,Mod Rewrite,我有一个服务器,我想强制与外界进行https通信,但是,服务器上有一些服务需要本地服务器上的进程通过http访问 我尝试了以下方法: RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} 当然,本地服务器上运行的服务无法通过http访问。除了localhost和127.0.0.1之外,我如何对所有内容强制使用https?或者,如果更简单的话,我有两个用于此服务器的外部
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
当然,本地服务器上运行的服务无法通过http访问。除了localhost和127.0.0.1之外,我如何对所有内容强制使用https?或者,如果更简单的话,我有两个用于此服务器的外部域-如何仅强制和服务器的外部面向IP使用https?试试看,我不确定它是否有效,但可能有效,我从未处理过实际的“localhost”值
RewriteEngine On
RewriteCond %{HTTP_HOST} !^localhost [NC]
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://mysub.mydomain.com/$1 [R=301,L]
更新2:我考虑过这一点,意识到这无法处理这个案件:
重定向到-在添加该url之前,测试该url是否使用第一个规则重定向,如果没有,则测试第二组规则
要更正此情况,请尝试:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^localhost [NC]
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} mysub2.mydomain.com [NC]
RewriteRule ^/?(.*) https://mysub.mydomain.com/$1 [R=301,L]
更新2说明,如果有效:
使测试更复杂,现在重写发生如果不是localhost/127.0.0.1,则测试不是https或是mysub2.mydomain.com(或服务器上要重定向到的任何其他域/子域):
=更新说明:
这是一组非常简单的规则。我们创建了3个必须满足的条件,才能应用重写规则。为了安全起见,我习惯性地使用^by,也就是说,这就是它的开头,所以这里说,主机名/IP不是以localhost/127.0.0.1开头的!这意味着不是
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^localhost [NC]
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这是一种稍微不同的情况,但如果您在服务器前面有一个代理,比如负载平衡器,您可以这样做(AWS建议在ELB之后重定向到TLS),我认为这很酷,因为我发现不这样做会使我的配置也重定向本地主机:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
请举一个127.0.0.1中的服务的例子,我在https/ssl站点上做了很多基于服务器的请求,但它们都只是通过lynx请求站点上的一个页面。我不清楚什么情况会涉及到您所说的内容。如果这两个域是通过apache vitualhosts运行的,那么您将在正常情况下为每个域设置https,而不是每个服务器,除非您拥有域1或域2的所有子域的全局证书。我通过VM在windows azure上托管,因此我有两个域-一个是azure提供的域(thedomain.cloudapp.net),另一个是我拥有SSL证书的域(mysub.mydomain.com)。任何人都不应该使用cloudapp.net域,但如果他们这样做,我希望确保我将他们正确重定向到真正的SSL域。我正在使用位于机箱上的parsoid服务器运行mediawiki。parsoid只能通过本地计算机访问,但它是一个web服务,并且mediawiki配置为通过访问它。这样做了!非常感谢。如果你有几分钟的时间,解释一下为什么这样做也会很有帮助。哦,这样做很好,因为你的设置我不是很肯定。很简单,我会更新答案来解释。现在我想起来了,你可能可以删除localhost条件,因为localhost的REMOTE_ADDR将是127.0.0.1,但是我我敢肯定,因为我从来没有处理过这种情况。但它没有伤害到有它在那里,在奇怪的机会,localhost成为不是127.0.0.1你仍然会被涵盖。