LINUX.ORG.RU

Apache2 to Lighttpd config


0

1

Необходимо перевести часть конфига Apache для Lighttpd: С первой частью вроде бы всё понятно:

<Directory "/srv/http">
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST}  ^www\.(.+)$  [NC]
RewriteRule ^(.*)         http://%1/$1 [L,R=301] 
</Directory>
$HTTP["host"] =~ "^www\.(.*)$" {
  url.redirect = ( "^/(.*)" => "http://%1/$1" )
}
Тут нужно отключить возможность использовать SSL и включить листинг димректории:
<Directory "/srv/http/public">
Options +Indexes
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}
</Directory>
С листингом всё опять же просто:
$HTTP["url"] =~ "^/public($|/)" {
  dir-listing.activate = "enable" 
}

Проблема с rewrite/redirect. Дело в том, что сервер не имеет домена и доступен из интернета по ip и для внуцтренней сети по ip или hostname. Все примеры, которые я смог найти, привязаны к домену.

И в догонку:

<Directory "/srv/http/private">
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

AuthType Basic
AuthName "Access restricted. Please enter login and password."
AuthUserFile "/etc/httpd/conf/htpasswd"
Require user xxx
</Directory>
Здесь также не могу разобраться с перенаправлением на https. Аутентификация делается просто:
auth.backend                 = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd/htpasswd"

auth.require               = ( "/private" =>
                               (
                                 "method"  => "basic",
                                 "realm"   => "Access denied",
                                 "require" => "user=xxx"
                               )
                             )

Также интересует вопрос, как включить SSL только для определённой части сайта, например, http://IP/private/ ?

★★★★★

Таки сделал (может кому пригодится):

$HTTP["host"] =~ "^www\.(.*)" {
  url.redirect            = ( "^/(.*)" => "http://%1/$1" )
}

$SERVER["socket"] == ":80" {
  $HTTP["host"] =~ "(.*)" {
    url.redirect = ( "^/(private.*)" => "https://%1/$1" )
  }
}

$SERVER["socket"] == ":443" {
  $HTTP["host"] =~ "(.*)" {
    url.redirect = ( "^/(public.*)" => "http://%1/$1" )
  }
}

$HTTP["url"] =~ "^/public($|/)" {
  dir-listing.activate = "enable"
}

auth.backend = "htpasswd"
фuth.backend.htpasswd.userfile = "/etc/lighttpd/htpasswd"
auth.require = (
  "/private" => (
    "method"  => "basic",
    "realm"   => "Access denied",
    "require" => "user=timur"
  )
)

unikum ★★★★★ ()
Ответ на: комментарий от unikum

Может порты местами поменять?

$SERVER["socket"] == ":443" {
  $HTTP["host"] =~ "(.*)" {
    url.redirect = ( "^/(private.*)" => "https://%1/$1" )
  }
}

$SERVER["socket"] == ":80" {
  $HTTP["host"] =~ "(.*)" {
    url.redirect = ( "^/(public.*)" => "http://%1/$1" )
  }
}
hbars ★★★★★ ()
Ответ на: комментарий от hbars

Как раз нет - смысл выражения: если порт 80, то перенаправлять на https для private (если порт 443, перенаправлять на http для public). В вашем коде получается, что нужно с 443 порта перенаправлять на https, что создаст бесконечный редирект.

unikum ★★★★★ ()
23 октября 2011 г.
Ответ на: комментарий от unikum

Перевод htaccess на lighttpd

Добрый вечер. Имеется .htaccess файл с содержимым

AddDefaultCharset UTF-8
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
php_flag register_globals Off
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
Options -Indexes

# php_value error_reporting 2047
# php_value error_log "/var/www/public_html/log/error.log"
# php_flag log_errors on
# php_flag display_errors off

RewriteEngine    on

RewriteRule ^admin/(.*)$ admin/index.php?route=$1 [L,QSA]

RewriteCond %{REQUEST_URI} !^/admin

RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

Работает это чудо безотказно под Apache, но возникла необходимость перенести на сайт под сервером Lighttpd, который не поддерживает .htaccess и все правила необходимо указывать в конфиге сервера.

У меня получилось перевести «на язык» лайти строчку вида

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

Получилось что-то вроде

url.rewrite-once = (
    "^(.*)$" => "index.php?route=$1",
)
Чтобы открывались css и прочие статичные файлы, прописал
".*\.(js|ico|gif|jpg|png|css)$" => "$0",
С таким раскладом ЧПУ на сайте работает, но в админку не заходит (каталог admin/), и если отключить ЧПУ и передавать ссылки в стандартном виде GET запросов /?a=b то работает все как-то наполовину, пока не убрать тех строк, что я нахимичил выше.

Прошу помочь с переводом данного .htaccess под конфигурацию lighttpd. Спасибо за внимание.

konoplev_roman ()
Ответ на: Перевод htaccess на lighttpd от konoplev_roman
AddDefaultCharset UTF-8

=>

mimetype.assign             = (
  ".css"          =>      "text/css; charset=utf-8",
  ".html"         =>      "text/html; charset=utf-8",
  ".htm"          =>      "text/html; charset=utf-8",
  ".js"           =>      "text/javascript; charset=utf-8",
  ".log"          =>      "text/plain; charset=utf-8",
  ".conf"         =>      "text/plain; charset=utf-8",
  ".text"         =>      "text/plain; charset=utf-8",
  ".txt"          =>      "text/plain; charset=utf-8",
  ".xml"          =>      "text/xml; charset=utf-8",
)
dir-listing.encoding = "utf-8"

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html

=>

server.errorfile-prefix = "/path/to/error/files/"
http://redmine.lighttpd.net/wiki/lighttpd/Server.errorfile-prefixDetails

RewriteEngine    on

RewriteRule ^admin/(.*)$ admin/index.php?route=$1 [L,QSA]

RewriteCond %{REQUEST_URI} !^/admin

RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

=>

url.rewrite-if-not-file = (
  "^/admin/(.")" => "/admin/index.php?route=$1",
   "^/(.*)" => "/index.php?route=$1"
)
З.Ы.: Могут быть опечатки.

unikum ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.