Назад | Перейти на главную страницу

Как совместить Lighttpd simple_vhost с перенаправлением с www на не-www?

Я установил простой виртуальный хостинг с помощью модуля Lighttpd simple_vhost и хочу сделать постоянное перенаправление 301 с www на не-www.

Вот наиболее важные части моего файла конфигурации:

server.modules = (
  "mod_simple_vhost",
  "mod_redirect",
)

simple-vhost.server-root = "/Websites/"

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

Блок перенаправления взят из документации Lighttpd как есть, но он вообще не работает. В документации модуля simple_vhost упоминается небольшая трудность:

Вы должны иметь в виду, что условные выражения и simple-vhost мешают друг другу.

Я пробовал предложенное там решение (http://redmine.lighttpd.net/projects/1/wiki/Docs_ModSimpleVhost), но все равно безуспешно:

$HTTP["host"] != "www.example.org" {
    simple-vhost.server-root = "/Websites" 
    simple-vhost.default-host = "example.org"  
}

$HTTP["host"] == "www.example.org" {
    server.document-root = "/Websites/example.org" 
}

Как правильно выполнять перенаправление с www на не-www при использовании виртуальных хостов?

Вот мой полный файл конфигурации.

server.modules = (
"mod_access",
"mod_simple_vhost",
"mod_alias",
"mod_accesslog",
"mod_compress",
"mod_redirect",
"mod_cgi"
)

server.follow-symlink = "enable"

server.document-root = "/Websites"

server.errorlog = "/Websites/error.log"
server.breakagelog = "/Websites/breakage.log"

index-file.names = ("index.html")

accesslog.filename = "/Websites/access.log"

## deny access the file-extensions
#
# ~ is for backupfiles from vi, emacs, joe, ...
# .inc is often used for code includes which should in general not be part
# of the document-root
url.access-deny = ( "~", ".inc" )

##
# which extensions should not be handle via static-file transfer
#
# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
static-file.exclude-extensions = ( ".php", ".pl")

server.port = 80
server.bind = "10.20.30.40"

## to help the rc.scripts
server.pid-file = "/var/run/lighttpd.pid"

## virtual directory listings
dir-listing.encoding = "utf-8"
server.dir-listing = "enable"

server.username = "lighttpd"
server.groupname = "lighttpd"

#### compress module
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ("text/plain", "text/html", "application/x-javascript", "text/css")

#### external configuration files
## mimetype mapping
include_shell "/usr/share/lighttpd/create-mime.assign.pl"

## load enabled configuration files,
## read /etc/lighttpd/conf-available/README first
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

# Simple virtual host.
$HTTP["host"] != "www.example.com" {
simple-vhost.server-root = "/Websites/"
}

$HTTP["host"] == "www.example.com" {
server.document-root = "/Websites/example.com/"
}
simple-vhost.default-host = "example.org"

уже позаботится о субдомене www.example.org (если папка для него не существует).

в остальном оба фрагмента конфигурации выглядят хорошо; но вы не вставили полную конфигурацию, включения отсутствуют. типы пантомимы, вероятно, не важны, но

include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

может многое.

lighttpd -p -f /etc/lighttpd/lighttpd.conf

показывает полную конфигурацию.

также, как указано в комментариях, расскажите нам, как вы тестировали (что означает «вообще не работает»?). проверьте с помощью curl, чтобы убедиться, что кеш вашего браузера не является проблемой.

посмотри на http://redmine.lighttpd.net/projects/lighttpd/wiki/DebugVariables слишком.