.htaccess переписывает мои URL, когда я этого не хочу! - PullRequest
0 голосов
/ 08 марта 2011

Я пытаюсь получить .htaccess переписать URL для моего сайта. Например:

/Lessons/PhrasalVerbs/PVList/bringup

становится

/index.php?page=Lessons/PhrasalVerbs/PVList/bringup

Это, кажется, довольно распространенное желание, поэтому, осмотрев Интернет, я придумал (читай, ошеломленно скопированный) это:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.example.com/index.php?page=$1 [L,QSA]

Теперь все работает, но в строке появляется второй, а не первый URL. Теперь, если я изменю последнюю строку с

RewriteRule ^(.*)$ http://www.example.com/index.php?page=$1 [L,QSA]

до

RewriteRule ^(.*)$ /index.php?page=$1 [L,QSA]

Теперь адресная строка выглядит нормально, но сайт не выглядит корректно, теряя большую часть своего форматирования и изображений ... (к сожалению, я не могу публиковать изображения или ссылки на изображения ...)

Кроме того, если я, например, снова нажму на ссылку на страницу «воспитания», URL-адрес перейдет с

/Lessons/PhrasalVerbs/PVList/bringup

до

/Lessons/PhrasalVerbs/PVList/Lessons/PhrasalVerbs/PVList/bringup

Так что это как бы повторяется.

Как понятно, я совершенно бесполезен в mod_rewrite и очень растерялся. Поскольку это, кажется, довольно распространенное использование .htaccess, я надеюсь, что кто-то может указать на мою глупую ошибку!

1 Ответ

1 голос
/ 08 марта 2011

Это довольно распространенная ошибка при перезаписи URL, и она не имеет ничего общего с mod_rewrite.

Проблема в том, что вы используете относительные URL в ваших документах.И относительные URL-адреса разрешаются клиентом с использованием базового URL-адреса, то есть URL-адреса документа, иначе не указывается.

Так что, если путь URL-адреса документа равен /foo/bar и в нем есть ссылка с относительным URL-адресом baz/quux, клиент разрешает его до /foo/baz/quux, поскольку baz/quux разрешается относительно /foo/bar, а не * /.

Вы можете исправить это, используя вместо этого абсолютные пути, т.е. /baz/quux вместоbaz/quux.Или путем явного изменения базового URI с помощью элемента BASE .Но я бы не стал этого делать, поскольку это влияет на все относительные URL-адреса, а не только на относительные URL-пути.

...