2013-05-31 4 views
1

Я работал с URL-адресами на своей веб-странице, но я не могу решить проблему для URL-адресов с двумя параметрами..htaccess с двумя параметрами messing css, js, images paths

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z0-9-z\-]+)/?$ index.php?strona=$1 [L] 
RewriteRule ^([a-zA-Z0-9-z\-]+)/([a-zA-Z0-9-z\-]+)/?$ index.php?strona=$1&id=$2 [L] 

URL, кажется, хорошо, за исключением, что, когда мой текущий URL имеет 2 параметра (например, я на http://example.com/subpage/5 весь веб-страница сломана (Стили, навигацию и т.д.), так как .htaccess изменил все ссылки на:

(for example navigation): 
http://example.com/subpage_with_2_parameters/home 
instead of 
http://example.com/home 

Страницы с одним параметром (например: http://example.com/contact) отлично работает

единственное решение (которое ужасно) я на. ум е абсолютные ссылки.

ответ

4

Вы не единственный, кто имеет дело с этой проблемой css, js, путей изображений, запутанных после реализации так называемых хороших URL-адресов. Я вижу, что эти проблемы сообщают о SO почти каждый день.

Вы можете решить эту проблему в 3-х направлениях:

  1. лучшим решением будет использовать абсолютные пути для изображений, CSS и JS файлы, т.е. начать свой путь с / или http://
  2. Другой вариант заключается в использовании база HREF тега в голову разделе HTML, как это:

    <base href="http://www.example.com/">

  3. третий вариант через mod_ переписать

Поместите эти строки выше ваш другой RewriteLine в вашем файле .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{DOCUMENT_ROOT}/$1 -f 
RewriteRule ^[^/]+/([^.]+\.(?:js|css|jpe?g|png|gif))$ /$1 [L,R=301,NC] 
0

Это не ваши правила перезаписи, которые нарушают ваши таблицы стилей, но ваш фактический HTML. То же самое произошло бы, если бы у вас был фактический каталог с именем foo и там размещен index.php.

Если вы пишете <a href="home">Home</a>, что ссылка относительно текущий каталог (в URL-пространстве), так на странице с URL, как http://example.com/foo/bar/baz это ссылки на http://example.com/foo/bar/home.

Вместо этого вы хотите, чтобы ссылка была относительно корня вашего домена; для этого вам нужна ведущая косая черта: <a href="/home">Home</a>

Единственная причина, по которой это казалось раньше, заключается в том, что все ваши URL-адреса были в корневом каталоге, поэтому «текущий каталог» и «корень домена» были одинаковыми.

Смежные вопросы