it-swarm.com.ru

Перезапись URL: css, js и изображения не загружаются

У меня есть следующее правило для .htaccess

Options +FollowSymLinks

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]

RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1

Он перенаправляет http://localhost/detail/123 URL на http://localhost/detail.php?id=123. Страница перенаправляется успешно, но проблема CSS, JS, and images не загружаются,

CSS, js-файлы находятся под http://localhost/css/ и http://localhost/js/

Одним из решений является использование абсолютного пути (ex/CSS или/js, а не только CSS /,/js, но это не кажется надежным решением, так как мы должны изменить его для всех файлов,

Любое другое решение, основанное на правилах .htaccess, которое не зависит от редактирования всех файлов PHP и позволяет использовать «относительные пути»? 

19
Bhavesh Gangani

Не ленитесь и меняйте относительные URI в своих ресурсах. Это лучшее.

Вы можете стать умным и использовать регулярные выражения и заменить все нужные вам файлы, которые будут похожи на несколько строк, и все готово. Сколько мест можно изменить? И вы должны использовать шаблон.

Это должно работать, но я бы не пошел по этому пути.

RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]

17
Anthony Hatzopoulos

одним из решений является использование абсолютного пути (ex/css или/js, а не просто css /,/js, но это не выглядит надежным решением, так как мы должны изменить его для всех файлов,

Это потому, что ваши относительные URI изменили свою базу. Первоначально база /, когда страница /detail.php?id=123, и браузер правильно заполняет относительные ссылки с базой /. Но когда браузер переходит на страницу типа /detail/123, база внезапно становится /detail/, и он пытается добавить ее перед всеми относительными URL-адресами и, таким образом, ни один из них не загружается.

Вы можете сделать ваши ссылки абсолютными или изменить базу URI в заголовке ваших страниц (между тэгами <head> </head>):

<base href="/">
20
Jon Lin

Я применил переписывание URL к проекту в основном php. Я столкнулся с той же проблемой. CSS, Js и изображения не загружались. Я использовал это, и это сработало для меня. Источник

# Allow any files or directories that exist to be displayed directly
RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]
5
Sajal

Ответ Энтони совершенно правдив, и он на самом деле пытается поделиться некоторыми хорошими практиками.

Однако, поскольку вы не удовлетворены этим ответом, здесь есть другое решение. Просто вставьте эту строку в ваш .htaccess перед любой командой Rewrite:

RedirectMatch permanent ^/detail/((css|js)/.*)  /$1

Он перенаправит все первоначально 404 запроса на /details/css/style.css и /details/js/js.s в их фактическое местоположение. Ни особенно симпатичный, ни элегантный, но он просто работает.

1
Perleone

этот код отлично работает для меня, добавьте перед правилом перенаправления (RewriteRule ^ detail/([0-9] +) /? $ detail.php? id = $ 1) 

RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]
0
danu