URL-адреса fastcgi Lighttpd не переписаны

У меня есть сервер lighttpd с fastcgi и web.py со следующей конфигурацией fcgi:

fastcgi.server = ( "/code.py" => 
(( "socket" => "/tmp/fastcgi.socket",
   "bin-path" => "/etc/lighttpd/code/code.py",
   "check-local" => "disable",
   "max-procs" => 1

)) )

и основной конфиг:

url.rewrite-once = (
  "^(.*)/favicon.ico$"  => "/static/favicon.ico",
  "^/static/(.*)$"      => "/static/$1",
  "^/code.py(.*)$"      => "/code.py/404",
  "^/forum(.*)$"        => "/code.py/forum/$1"
)

Если я захожу на www.mysite.com/forum, все работает как положено, но если я захожу на www.mysite.com/code.py/forum, я не перенаправляюсь на 404, как должен, а на самом деле получить первую ссылку. Я в основном хочу скрыть свои внутренности от внешнего мира.

Я посмотрел в журнал ошибок, и кажется, что сервер действительно переписывает URL-адрес, но это не имеет значения.

(response.c.300) -- splitting Request-URI 
(response.c.301) Request-URI  :  /code.py/forum 
(response.c.302) URI-scheme   :  https 
(response.c.303) URI-authority:  www.mysite.com 
(response.c.304) URI-path     :  /code.py/forum 
(response.c.305) URI-query    :   
(response.c.300) -- splitting Request-URI 
(response.c.301) Request-URI  :  /code.py/404 
(response.c.302) URI-scheme   :  https 
(response.c.303) URI-authority:  www.mysite.com 
(response.c.304) URI-path     :  /code.py/404 
(response.c.305) URI-query    :   
(response.c.349) -- sanatising URI 
(response.c.350) URI-path     :  /code.py/404 
(mod_access.c.135) -- mod_access_uri_handler called 
(mod_fastcgi.c.3609) handling it in mod_fastcgi 
(response.c.470) -- before doc_root 
(response.c.471) Doc-Root     : /var/www/html 
(response.c.472) Rel-Path     : /code.py 
(response.c.473) Path         :  
(response.c.521) -- after doc_root 
(response.c.522) Doc-Root     : /var/www/html 
(response.c.523) Rel-Path     : /code.py 
(response.c.524) Path         : /var/www/html/code.py 
(response.c.541) -- logical -> physical 
(response.c.542) Doc-Root     : /var/www/html 
(response.c.543) Rel-Path     : /code.py 
(response.c.544) Path         : /var/www/html/code.py 
(mod_fastcgi.c.3035) got proc: pid: 30262 socket: unix:/tmp/fastcgi.socket-0 load: 1 

Любые идеи?


person Tom    schedule 28.10.2012    source источник


Ответы (1)


Попробуйте что-то вроде этого:

url.rewrite-once = (
  "^/favicon\.ico$" => "/static/favicon.ico",
  "^/forum(.*)$" => "/forum/code.py$1"
)

$HTTP["url"] =~ "^/forum(.*)$" { 
  ( "/code.py" => 
    (( "socket" => "/tmp/fastcgi.socket",
       "bin-path" => "/etc/lighttpd/code/code.py",
       "check-local" => "disable",
       "max-procs" => 1,
       "bin-environment" => ("REAL_SCRIPT_NAME" => "")
    ))
  )
}
person Andrey Kuzmin    schedule 28.10.2012
comment
Я знаю об этом, и это не помогает. Я хочу, чтобы мой веб-сайт просто переходил на index.html, а все, что идет на mysite.com/forum, обрабатывалось процессом fastcgi. Проблема в том, что я не хочу, чтобы URL-адреса типа mysite.com/code.py/forum были законными (см. Конфиг, который у меня есть в моем основном вопросе, я пытаюсь перенаправить на 404, и это не работает) . - person Tom; 28.10.2012
comment
Вы пробовали установить "bin-environment" => ("REAL_SCRIPT_NAME" => "") ? - person Andrey Kuzmin; 28.10.2012
comment
Я думаю, что вы должны включить fastcgi только для подпути /forum. $HTTP["url"] =~ "^/forum(.*)$" { fastcgi.server = ( "/code.py" => проверьте http://redmine.lighttpd.net/projects/1/wiki/Docs_ModFastCGI - person Andrey Kuzmin; 28.10.2012
comment
Кажется, "bin-environment" => ("REAL_SCRIPT_NAME" => "") добился цели. Я еще не уверен, что он делает, я выясню это, пока я проверяю, что у него нет нежелательных побочных эффектов. И я включу fastcgi только для подпути. Спасибо за помощь. - person Tom; 28.10.2012
comment
Пожалуйста. Извините за путаницу, раньше я запускал среду lighttpd, теперь мои предпочтительные способы развертывания приложений web.py — это либо nginx+uwsgi, либо apache2+mod_wsgi. - person Andrey Kuzmin; 28.10.2012