mod_rewrite меняет текущий каталог - PullRequest
1 голос
/ 21 февраля 2011

У меня есть php-файл, который загружает статью из БД на основе заданных переменных. В корне сайта также есть файл .htacces. Я использовал это в htaccess для перенаправления

RewriteRule ^ Статьи / ([A-Za-Z0-9 -_ \ s] +). HTML $ шаблон / index.php? действие = viewarticle и псевдоним = $ 1

после перенаправления страница отображается нормально, но HTML-код на странице работает неправильно, например:

media/2011/02/21/logos.jpg превращается в articles/media/2011/02/21/logos.jpg

Это происходит потому, что htacces перенаправляет. Есть ли способ сделать это перенаправление, оставив корневой каталог без изменений?

Ответы [ 3 ]

5 голосов
/ 21 февраля 2011

Это происходит потому, что htacces перенаправляет.

Нет, это происходит потому, что браузер считает, что

example.com/articles/my_article.html

является ресурсом в подкаталоге /articles и обрабатывает все относительные URL как относящиеся к /articles.

Нет способа изменить это поведение.

Вам нужно будет начать использовать абсолютные ссылки на изображения или относительные ссылки на изображения, которые учитывают дополнительный каталог:

<img src="/media/2011/02/21/logos.jpg">      <------ recommended
<img src="../media/2011/02/21/logos.jpg">

вы также можете использовать <base>, как предлагает @Boris, но абсолютные пути (или полные URL), по моему мнению, являются гораздо более чистым решением проблемы.

1 голос
/ 21 февраля 2011

Во-первых, что вы подразумеваете под "html на страницах идет не так":

  • Это ссылка, показанная в строке состояния?
  • Это фактический HREF? Если это так, вы, вероятно, используете некоторый помощник вида, который создает ваш "базовый URL"
  • Возможно, вы «связываете» свой ресурс без указания абсолютного пути (используя /), тогда ваш ресурс «относительно» связан с текущей страницей (/ article /)

.htaccess ничего не меняет в вашем коде.

Существует html-элемент, который позволяет вам определять базовый URL, используемый повсюду на вашей странице.

<base href="/root" />

если у вас есть, например, <a href="/articles/12">Article 12</a>, то при нажатии на ссылку вы будете перенаправлены в / root / article / 12

0 голосов
/ 21 февраля 2011

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

например: в config.inc.php

define("ROOT_URI", "http://myserver.com/myapp");

везде:

<img src="<?php echo ROOT_URI;?>/media/2011/02/21/logos.jpg

Это похоже на использование элемента base, как предложил Борис, без его использования (мне также не нравится base), и оно позволяет вашему приложению работать в любой папке на веб-сервере, где он хранится.

...