Я следую правила для .htaccess
Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteRule ^detail/([0-9]+)/?$ detail.php?id=$1
Он перенаправляет http://localhost/detail/123
на 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 и позволяет использовать «относительные пути»?
Не ленитесь и измените свои относительные URI в своих ресурсах. Это лучшее.
Вы можете получить умный и использовать регулярное выражение и заменить все нужные вам файлы, которые будут похожи на несколько лайнеров, и все готово. Сколько мест может измениться? И вы должны использовать шаблон.
Это должно работать, но я не пошел бы так.
RewriteRule ^detail/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]
одним из решений является использование абсолютного пути (ex / css или / js, а не только css /, / js, но это не выглядит надежным решением, так как мы должны изменить его для всех файлов,
Это связано с тем, что ваши относительные URI изменили базу. Первоначально базой является /
когда страница /detail.php?id=123
, и браузер правильно заполняет относительные ссылки с /
base. Но когда браузер переходит на страницу типа /detail/123
база внезапно становится /detail/
и она пытается добавить это перед всеми относительными URL-адресами и, следовательно, ни одна из них не загружается.
Вы можете либо сделать свои ссылки абсолютными, либо изменить базу URI в заголовке ваших страниц (между тегами <head> </head>
):
<base href="/">
Я применил перенастройку url к проекту в core 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]
Ответ Энтони вполне правдоподобен, и он на самом деле пытается привнести некоторые хорошие практики.
Однако, поскольку вы не довольствуетесь этим ответом, это другое решение. Просто вставьте эту строку в свой .htaccess перед любой командой Rewrite:
RedirectMatch permanent ^/detail/((css|js)/.*) /$1
Он перенаправит все изначально 404 запросов на /details/css/style.css и /details/js/js.s в их фактическое местоположение. Ни то, ни другое не очень красивое и элегантное, но оно просто работает.
этот код отлично работает для меня, добавляет перед правилом перенаправления (RewriteRule ^ detail / ([0-9] +) /? $ detail.php? id = $ 1)
RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]