URL-адреса Symfony2 и mod_rewrite не работают - PullRequest
1 голос
/ 13 октября 2011

У меня настроен этот шаблон в моем routing.yml:

/{customer}/{site}/content/{id}.{format}

Теперь я хочу опустить часть /{customer}/{site} и переписать ее с помощью правила перезаписи.У Symfony уже есть .htaccess с правилом перезаписи.Я изменил его на

RewriteRule ^(.*)$ app_dev.php/foo/bar/$1 [QSA,L]

Но когда я указываю своему браузеру на http://localhost/content/42.html, я получаю это исключение:

No route found for "GET /content/42.html"

Я немного повозился и выяснил, почему возникает эта проблема: Symfony использует переменную _SERVER['REQUEST_URI'] для анализа запроса, но когда вы используете mod_rewrite, URL-адрес в этой переменной не является ожидаемым /foo/bar/content/42.html, а content/42.html.

. Я мог бы заменить app_dev.php намой собственный и перезаписать REQUEST_URI, но я не хочу взламывать Symfony.

Edit : удаление части /{customer}/{site} из конфигурации маршрутизации не является решением, потому что яработая над приложением с несколькими клиентами и несколькими сайтами, и я хочу скрыть эти части через URL, чтобы я мог указать в своем браузере значение www.my-fancy-site.com, и apache перезаписал этот URL-адрес на /foo/bar/content/42.html.

1 Ответ

2 голосов
/ 14 октября 2011

хорошо, что вы спросили:

Что-то вроде:

app/config/routing.yml:

blog:
  pattern: /{customer}/{site}/content/{id}.{format}
  defaults: { _controller: TestBundle:Blog:view ,customer:foo, site:bar }

И не трогайте правила перезаписи в .htaccess или app_dev.php вообще

РЕДАКТИРОВАТЬ: Для вашего обновленного вопроса вам также понадобится:

app/config/routing.yml:

blog:
  pattern: /
  defaults: { _controller: TestBundle:Blog:view, customer:foo, site:bar, id:4 }

Но таким образом URL сохраняет http://host/. Я хотел бы использовать контроллер приветствия, а затем просто перенаправить с этого на другой маршрут ... Один перенаправление должно быть в порядке.

Если быть более точным: вам понадобится два маршрута и контроллер только для перенаправления на ваш.

Пожалуйста, RTFM здесь: http://symfony.com/doc/2.0/book/controller.html#route-parameters-controller-arguments

и здесь: http://symfony.com/doc/2.0/book/routing.html

...