CSS, JS и изображения не отображаются с помощью довольно URL-адреса
Я пытаюсь переписать URL-адрес через файл htaccess, чтобы следующий URL
www.domain.com/subfolder/index.php?key
можно получить:
www.domain.com/subfolder/index.php/key
указанный "ключ" определит, какую страницу включить в код PHP.
У меня уже есть следующий код htaccess, однако CSS, JS, изображения и т.д. Не отображаются при использовании второго (чистого) URL-адреса. Любые идеи относительно того, что может быть проблемой?
RewriteEngine On
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]
RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1
Ответы
Ответ 1
Когда вы используете относительный URL-адрес, браузер будет динамически создавать полный URL-адрес, используя URL-адрес загруженного ресурса. Другими словами: он использует URL-адрес, поскольку он отображается в адресной строке. В вашем случае (www.domain.com/subfolder/index.php/key
) он пытается загрузить любой относительный URL относительно www.domain.com/subfolder/index.php/
. Однако ваши ресурсы не расположены.
У вас есть два варианта решения этой проблемы:
-
Преобразуйте свой относительный URL-адрес в абсолютный URL-адрес, по крайней мере, абсолютный для корня домена. Нечто вроде <img src="img/unicorn.png">
должно быть превращено в <img src="/path/to/img/unicorn.png">
.
-
Добавьте базу к элементу головы. Эта база будет использоваться вместо URL-адреса ресурса для вычисления полного URL-адреса. Вы должны добавить <base href="/">
к элементу <head>
. /
будет использоваться в качестве основы любого относительного URL.
Ответ 2
Вы пробовали базовый URL? Это лучшее решение, с которым я столкнулся. Просто поместите один в голову, а затем вы даже можете дать ему идентификатор и получить доступ к URL-адресу с помощью javascript.
<base id='baseElement' href="your path goes here"> <!--possibly generated with serverside code-->
Доступ с помощью jquery
var base = $('#baseElement').attr('href');
Ответ 3
На самом деле есть решение с .htaccess!
Предполагая, что ваш index.php находится в /mysite/
, а ваши файлы ressources находятся в /mysite/scripts/
, /mysite/images/
и /mysite/style/
как мины, вы можете пойти так:
RewriteEngine on
#first exclude those folders
RewriteBase "/mysite/"
RewriteRule ^(style|scripts|images)($|/) - [L]
#then go with your rules (the [L] terminates the ruling)
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]
RewriteRule ^index.php/([a-zA-Z0-9/_]+)$ index.php?key=$1
Вы можете увидеть .htaccess mod_rewrite - как исключить каталог из правила перезаписи для нескольких других способов.
Ответ 4
Кроме того, вы можете попробовать добавить это в свой HTaccess:
RewriteBase /