2011-12-31 2 views
2

Я кодирую портал, который имеет несколько категорий.URL Rewrite and design files

Пример:

http://localhost/portal/cats 

http://localhost/portal/dogs 

Ofcourse это возможно с URL переписать

как этот

RewriteRule ^cats$ /portal/index.php?cat=cats 

Ok так это работает хорошо.

Проблема происходит, когда я пытаюсь получить доступ к странице, как этот

http://localhost/portal/cats/black-cat-22 

Мой URL Rewrite является:

RewriteRule ^cats/(.*)-([0-9]+)$ /portal/page.php?cat=cats&id=$2 

Почему?

Поскольку все мои файлы изображений CSS & находятся в http://localhost/portal/elements, а не в http://localhost/portal/cats/elements - это даже не настоящий каталог.

Так что я ищу решение, как сделать переписывание, если URL-адрес включает/элементы/он читает из/portal/elements не из любого другого каталога.

Если что-то неясно, можете задать ниже.

Cheers и счастливого нового года.

ответ

3

Вот где HTML <base> тег приходит на помощь :)

Добавить что-то вроде этого, как первая линия в вашей HTML голове:

<base href="http://localhost/portal/" > <!-- or end with /> if XHTML --> 

Тогда все вы ссылаетесь с относительными URL-адресами будет относиться к этой базе.

Таким образом, вы можете ссылаться на ваш CSS с помощью:

<link rel="stylesheet" type="text/css" href="elements/stylesheet.css" /> 

Который должен решить, чтобы: http://localhost/portal/elements/stylesheet.css, независимо от того, что URL вы в настоящее время посещения (будь то portal/cats или portal/cats/some-black-cat т.д.

+0

woah thank youuuuuuuuuu: P не знал про тег - глупо мне: D еще раз спасибо, и я желаю вам действительно приятных праздников. – user1102979

+0

Не разрешает ли он: 'http: // localhost/elements/stylesheet.css'? – hakre

+1

@hakre вы правы .. относительная ссылка должна быть без косой черты в начале. Виноват. Починил это. – bummzack

1

При сопоставлении URL-адресов, когда они входят в ваше приложение, вам необходимо отобразить URL-адреса, когда они «возвращаются» из приложения.

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

$baseUrl = 'http://localhost/portal/'; 
$localUrl = 'elements/image.png'; 
$fullUrl = $baseUrl . $localUrl; 

Или у вас есть собственные спецификации внутреннего URL и получить карту глобально-й с output filter (PHP способом сделать это).

Как вы используете .htaccess, чтобы отобразить URL-адреса в своем приложении, используйте его, чтобы отобразить их обратно. Это можно сделать с помощью mod_substituteDocs.

В вашем приложении используется специальная URL-адрес, например. site://, он будет автоматически заменен на ваш серверный базовый URL http://localhost/portal/. .htaccess код:

<Location /> 
    AddOutputFilterByType SUBSTITUTE text/html 
    Substitute s/site:\/\//http://localhost/portal//nq 
</Location> 
+0

Да, я был думая об этом, но для этого потребуется много перекодировки. Поскольку я просто включаю() .html-шаблоны и переписываю url, это будет быстрее. – user1102979

+0

@ user1102979: Я добавил пример, показывающий, как выходной фильтр может работать с '.htaccess'. – hakre

+0

Спасибо, но это решение слишком продвинуто для меня. Но я уверен, что когда-нибудь это поможет кому-то еще. Но спасибо за усилия и с новым годом. – user1102979