Мод-переписать махинации - PullRequest
2 голосов
/ 24 ноября 2008

У меня есть это правило перезаписи

RewriteEngine On
RewriteBase /location/
RewriteRule ^(.+)/?$ index.php?franchise=$1

Что должно изменить этот URL

http://example.com/location/kings-lynn

В этот

http://example.com/location/index.php?franchise=kings-lynn

Но вместо этого я получаю это

http://example.com/location/index.php?franchise=index.php

Кроме того, добавление перил ломает его. Я получаю страницу index.php, но ни одна из таблиц стилей или javascript не загружаются.

Я явно делаю что-то очень неправильное, но я понятия не имею, что, несмотря на то, что я потратил весь день на R'ingTFM, а также на множество онлайн-учебников и учебных пособий и вопросов здесь.

Ответы [ 3 ]

5 голосов
/ 24 ноября 2008

Ваша проблема в том, что вы перенаправляете дважды.

'location/index.php' соответствует регулярному выражению ^(.+)/?$

Возможно, вы захотите использовать условное условие "если файл не существует", чтобы оно не пыталось сопоставить второй раз.

RewriteEngine on
RewriteBase /location/
RewriteCond %{REQUEST_FILENAME} !-f   # ignore existing files
RewriteCond %{REQUEST_FILENAME} !-d   # ignore existing directories
RewriteRule ^(.+)/?$ index.php?franchise=$1  [L,QSA]

И, кроме того, есть [L, QSA], который пытается сделать его «последним» правилом (заметьте, это не совсем очевидно, как оно работает) и добавляет строку запроса к запросу, так что

location/foobar/?baz=quux  ==> index.php?franchise=$1&baz=quux

(я думаю)

3 голосов
/ 24 ноября 2008

Мне кажется, что фильтр перезаписи выполняется дважды. Попробуйте добавить последний флаг

RewriteRule ^(.+)/?$ index.php?franchise=$1 [L]
2 голосов
/ 24 ноября 2008

Ваше правило соответствует самому себе, и поэтому оно будет ссылаться на себя.

...