2014-01-29 61 views
0

我想重定向子域名到https(当请求到达http),但不是所有。 我正在使用FuelPHP,我正在清理URL,以便index.php不可见。 我写了这个配置,但是这并不像预期的那样工作。 HTTPS请求正在通过,但在请求使用HTTP时,服务器无法发送答案。lighttpd http到https

$HTTP["host"] !~ "^(demo|faq|help|forums|mail|www)\.(domain\.com)$" { 
    $HTTP["host"] =~ "^(.+\.)?(domain\.com)$" { 
    $SERVER["socket"] == ":80" { 
     url.redirect = ("^/(.*)" => "https://%1/$1") 
    } 
    $SERVER["socket"] == ":443" { 
     ssl.engine = "enable" 
     ssl.pemfile = "/etc/lighttpd/certs/domain.com.pem" 
    } 
    server.document-root = "/home/domain/beta/public" 
    server.errorlog = "/var/log/lighttpd/domain/beta/error.log" 
    accesslog.filename = "/var/log/lighttpd/domain/beta/access.log" 

    setenv.add-environment = ("FUEL_ENV" => "production") 

    url.rewrite-once = (
     "/(.*)\.(.*)" => "$0", 
     "/(js|ico|gif|jpg|png|swf|css|html)/" => "$0", 
     "^/([^.]+)$" => "/index.php/$1") 

    server.error-handler-404 = "/index.php" 
    } 
} 

我对某些子域(demo,faq,...)进行了特定的配置,这些子域是从开始过滤的。 所有未过滤的子域都由应用程序动态管理,因此必须保持可访问状态,但仅限于SSL。

+0

你说“服务器无法发送答案”,这是什么意思?如果你请求一个http页面,服务器返回的是什么?另外,您是否阅读过lighttpd [http to https](http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps)文档? – Macattack

+0

我使用Chrome Inspect元素跟踪记录的网络活动。浏览器发出的请求在使用HTTP时处于待定状态,并在使用HTTPS时得到完全解答。 –

回答

2

我看不到所有的配置,所以我不能肯定地说这是否能解决您的问题。

Lighttpd应默认侦听端口80,所以我没有指定它。

# Ssl config shouldn't be in a conditional 
$SERVER["socket"] == ":443" { 
    ssl.engine = "enable" 
    ssl.pemfile = "/etc/lighttpd/certs/domain.com.pem" 
} 

$HTTP["host"] !~ "^(demo|faq|help|forums|mail|www)\.(domain\.com)$" { 
    $HTTP["host"] =~ "^(.+\.)?(domain\.com)$" { 
     # Use the doc specified method of detecting http 
     $HTTP["scheme"] == "http" { 
      # capture vhost name with regex conditiona -> %0 in redirect pattern 
      # must be the most inner block to the redirect rule 
      $HTTP["host"] =~ ".*" { 
       url.redirect = (".*" => "https://%0$0") 
      } 
     } 
     .... 
    } 
} 
+0

看起来像这是行得通的。我打算玩这个,看看如何完全适应我的配置。谢谢 –

相关问题