Невозможность найти ваши файлы JavaScript и CSS - это проблема на стороне клиента / браузера, связанная с вашим URL-путем, это не должно быть исправлено .htaccess
(по крайней мере, в этом случае) - хотя это потому, что вы меняете это URL-путь (в .htaccess
), с которым вы столкнулись с этой проблемой.
Как подсказывает @closetnoc в комментариях, эта проблема вызвана использованием относительных URL в вашем HTML. Относительно чего? Помните, что пользовательский агент / браузер разрешает относительные URL в вашем HTML, а не сервер. Итак, вам нужно исправить ваши URL; не .htaccess
.
Например, если вы ссылаетесь файл CSS с относительной URL вида href="styles.css"
(заметьте, не слэш префикса) и вы в настоящее время в URL , example.com/view.php?id=15
то браузер будет , естественно , решить CSS URL и запрос example.com/styles.css
(в корневом каталоге документов). Однако, если вы в настоящее время в URL example.com/watch/15
(эффективно в /watch
«подкаталог» [* 1] ) , то браузер будет решить относительный CSS URL относительно к /watch
поддиректории, а не корня документа, так что вы в конечном итоге с абсолютной / решена URL формы example.com/watch/styles.css
.
( [* 1] Обратите внимание, что «подкаталог» в этом контексте не обязательно является физическим подкаталогом на вашем сервере - это «подкаталог» в URL-пути; дополнительный сегмент пути. Но браузер не знает разницы. )
То же самое применимо, если вы используете относительные URL-адреса в ваших пользовательских документах об ошибках (определенных с помощью ErrorDocument
директивы Apache). Пользовательский документ об ошибке потенциально может быть вызван по любому URL-адресу, поэтому любой относительный URL-адрес статического ресурса (CSS, изображение, JS и т. Д.) Будет относиться к URL-адресу, вызвавшему ошибку, а не к самому документу об ошибке. (расположение которого эффективно скрыто от агента пользователя).
Если вы изменили URL-адреса JavaScript и CSS, чтобы они были относительными к корню (начиная с косой черты) или даже абсолютными, у вас не возникло бы этой проблемы. Это был бы предпочтительный метод. Кроме того, вы можете использовать base
элемент ...
base
тег / элемент
В качестве альтернативы вы можете включить base
элемент в head
раздел вашего HTML-документа (хотя это не без предостережений [* 2] ). Это ссылки абсолютный URL , что все относительные URL - адреса являются по отношению к. Другими словами, поскольку вы ожидаете, что эти относительные URL будут относиться к корню документа, добавьте в head
раздел следующее:
<base href="http://example.com/">
Теперь будет запрашиваться относительный URL, такой как styles.css
ссылка в документе на URL , а не ./watch/15
http://example.com/styles.css
http://example.com/watch/styles.css
[* 2] Тем не менее, есть некоторые оговорки с использованиемbase
элемента. Основная проблема заключается в том, что любой относительный URL-адрес, который предназначен для текущего документа, теперь будет вместо этого целевого базового URL-адреса. Это может повлиять на привязки внутри страницы, такие какhref="#top"
URL-адреса формыhref="?sortby=date"
и т. Д., А также наform
элементы, которые отправляются самим себе с использованием пустогоaction
атрибута (например,<form action="" ...
). Эти относительные URL-адреса, предназначенные для текущего документа, необходимо изменить, чтобы они включали полный URL-адрес текущей страницы (что может препятствовать использованиюbase
тега в качестве обходного пути для начала).
Ссылка: