lighttpd, mod_rewrite и web.py неожиданное поведение - PullRequest
2 голосов
/ 26 декабря 2010

Я настроил lighttpd для работы с web.py. Теперь я хочу обработать все запросы в форме mysite.com / scripts / * через мой скрипт web.py. Вот так выглядит соответствующая часть lighttpd.conf:

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

url.rewrite-once = (
  "^/scripts/(.*)$" => "/code.py/$1",
)

Я установил простой code.py, который печатает то, что появляется в URL. Это код:

urls = (
    '(.*)', 'hello')

app = web.application(urls, globals(),True)

class hello:
    def GET(self, x):
        return "I have received: " + web.websafe(x)

Когда я ввожу mysite.com / code.py / test , я вижу «Я получил: / test» , что верно, но когда я ввожу mysite.com/scripts/test, я вижу "Я получил: /scripts/test".

Я ожидал, что правило перезаписи будет соответствовать тому, что следует после / scripts /, и переписать URL-адрес как /code.py/test, почему он также передает часть / scripts?

1 Ответ

0 голосов
/ 25 января 2011

"/scripts/test" и "/test" соответствуют (.*) в целом.Если вы хотите сопоставить только часть "test" обоих URL-адресов, вы можете написать что-то вроде этого.

urls = (
  r'(.*)/(.*)', 'hello',
)

app = web.application(urls, globals(), True)

class hello(object):
  def GET(self, x, y):
    return 'i have received ' + web.net.websafe(y)
...