htaccess переписать сводят меня с ума - PullRequest
0 голосов
/ 09 марта 2012

Я хочу использовать довольно простую переписку, что-то вроде этого:

RewriteRule monitor.html index.php/\?first_category_id=B008 [NC,L]

Но это не работает должным образом, идет как index.php / monitor.html (который запускает маршрутизацию Symfony и возвращает ошибку 404, но это другая история)
Однако, если я включу полный URL-адрес, как:

RewriteRule monitor.html http://example.com/index.php/\?first_category_id=B008 [NC,L]

отвечает правильный контент, но это похоже на полное перенаправление, переписанный URL отображается в браузере. И это не прозрачно и не легко развертывается.
Что мне здесь не хватает?

остальная часть файла htaccess, если это имеет значение:

RewriteCond %{REQUEST_URI} \..+$
RewriteRule .* - [L]
RewriteRule ^(.*)$ index.php [QSA,L]

1 Ответ

0 голосов
/ 09 марта 2012

Ваше правило выводит относительный путь, и вы находитесь в контексте для каждого каталога. Вам нужно RewriteBase. В контексте каждого каталога перезапись выполняется по расширенным путям файловой системы, а не по исходным URL-адресам. Но результаты расширения снова преобразуются в URL! RewriteBase предоставляет префикс, необходимый для этого. Без этого URL наивно состоит из того же префикса файловой системы, который был удален перед заменой, и в результате вы получите, например, http://example.com/var/www/docroot/blah..., что является бессмысленным. Либо RewriteBase, либо выведите абсолют, начиная с косой черты.

Кроме того, вы должны закрепить матч:

RewriteRule ^monitor.html$ ...

В противном случае правило потенциально будет совпадать где-то в середине пути, и только эта совпадающая часть будет заменена заменой! Вы не хотите сопоставлять и переводить amonitor.htmly/foobar, верно, и конвертировать только часть monitor.html в материал index.php.

Вы не должны избегать вопросительного знака в замене. Это не регулярное выражение! Просто index.php/?etc, а не index.php/\?etc (Может ли это быть обратная косая черта, которая порождает `index.php / monitor.html '?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...