mod_rewrite вопрос новичка - PullRequest
       7

mod_rewrite вопрос новичка

1 голос
/ 24 августа 2009

Итак, я настроил фронт-контроллер в стиле Zend. По сути, он просто перенаправляет каждый URL обратно в индекс.

URL-адреса в форме / controller/view/ + [additional parameters]

Я хотел бы создать несколько ярлыков в следующей форме:

RewriteRule ^home /home/index
RewriteRule ^products /products/view

RewriteRule .* index.php

Однако, mod_rewrite, похоже, игнорирует мои правила перезаписи. Это не меняет дом на дом / индекс, хотя я совершенно уверен, что он сможет уловить этот бит. Итак, я думаю, что это как-то связано с переименованием запроса в uri?

Вот файл .htaccess:

Options +FollowSymLinks
RewriteEngine on

RewriteRule  ^admin/  -  [L]
RewriteRule  ^media/  -  [L]

RewriteRule  ^home        home/index
RewriteRule  ^products    products/view

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

Ответы [ 3 ]

0 голосов
/ 24 августа 2009

Могут возникнуть проблемы при попытке переписать все, что только начинается с /home до /home/index, поскольку последнее также начинается с /home. Вы должны использовать более конкретный шаблон, подобный этому:

RewriteRule ^home$ home/index
RewriteRule ^products$ products/view

Но все остальное должно работать нормально.

0 голосов
/ 24 августа 2009

До сих пор я понял это очень много.

Если вы используете RewriteRule для изменения REQUEST_URI, это на самом деле не REQUEST_URI, а другая переменная с именем REDIRECT_URI. Это объясняет, почему ничего не происходило.

Также, что интересно, я мог бы сделать что-то вроде этого:

RewriteRule ^products products/view [NC,L]

Что-то на этот счет было предложено Фабианом. Он просто добавил index.php до конца, что у меня не сработало. Если я оставил этот index.php, все работало отлично. И каким-то волшебным образом он перенаправляет все на index.php.

Итак, пока все работает, но я не имею понятия, почему все работает. Для тех, кто сумел объяснить, что здесь происходит, есть определенное мнение. До тех пор я думаю, что я просто RTFM.

0 голосов
/ 24 августа 2009

Следующее правило перехватывает все, поэтому, если оно наверху, оно никогда не будет учитывать какие-либо другие правила.

RewriteRule .* index.php

Попробуйте следующее

Options +FollowSymLinks
RewriteEngine on

RewriteRule  ^admin/      -  [L]
RewriteRule  ^media/      -  [L]

RewriteRule  ^home        home/index [L]
RewriteRule  ^products    products/view [L]

RewriteCond  %{REQUEST_FILENAME} !-f
RewriteRule  .*           index.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...