Перезапись URL в результатах htaccess отсутствует CSS и изображения - PullRequest
2 голосов
/ 01 февраля 2020

Мне нужно удалить указанную c вещь из моего URL. Здесь я даю имя страницы user.php и получаю ее с использованием $_GET['url'], затем создаю массив с использованием метода PHP explode().

https://www.example.com/index.php?url=user

Мне нужно удалить index.php?url= следующим образом,

https://www.example.com/user

Теперь я уже использую этот код в .htaccess:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule index.php?url=$1 [QSA, L]

Почти все было хорошо, страница user.php была загружена идеально. Но когда мне дали sla sh на мой URL, он перестает показывать CSS или другие каталоги IMG. Но когда я удаляю файл .htaccess, он отлично работает в этом URL:

https://www.example.com/index.php?url=user/anonymous

Но не работает в этом URL, когда я назначаю .htaccess правила.

https://www.example.com/user/anonymous

Почему моя вся таблица стилей и другие каталоги не работают идеально?

Ответы [ 2 ]

1 голос
/ 01 февраля 2020
RewriteRule index.php?url=$1 [QSA, L]

Я думаю, у вас есть несколько вопиющих опечаток (?) В вашем вопросе, которые делают эту директиву полностью недействительной ... вы пропускаете шаблон RewriteRule так что это на самом деле ничего не будет совпадать, и ошибочный пробел в аргументе flags синтаксически неверен, что приведет к ответу 500 Internal Server Error?!

Директива RewriteRule должна быть записывается так:

RewriteRule ^([\w/-]+)$ index.php?url=$1 [QSA,L]

^([\w/-]+)$ соответствует URL-пути, содержащему любой из символов: a-z, A-Z, 0-9, _ (подчеркивание), / (sla sh) и - (дефис). Я исключил точку, которая, естественно, является частью настоящих имен файлов.

Вы также должны убедиться, что MultiViews отключен, чтобы mod_negotiation не переписывал запрос до mod_rwrite - так как ваши запросы "без расширения" появляются для сопоставления непосредственно с именами файлов. например. /user отображается на /user.php. Поместите следующее в начало вашего .htaccess файла:

Options -MultiViews

Но когда мне дали sla sh на мой URL, он перестает показывать CSS или другие каталоги IMG.

Это не проблема с .htaccess, но вызвана использованием относительных клиентских URL-адресов для ваших ресурсов * stati c. Когда вы запрашиваете URL /user/anonymous, браузер разрешает любые относительные URL относительно до /user/anonymous (не документ root - что, вероятно, является тем, что вы ожидаете). Если у вас есть относительный URL к css/styles.css, то браузер естественным образом разрешит это до /user/css/styles.css - который, вероятно, не существует (и, вероятно, будет переписан в index.php - но это не так. не проблема - проблема в том, что он не существует).

Если вы посмотрите на сетевой трафик c (HTTP-запросы) в браузере, он должен дать вам подсказку, как что происходит.

Вам нужно изменить URL-адреса на стороне клиента, чтобы использовать root -относительные (начиная с sla sh) или абсолютные (схема + имя хоста) URL-адреса для решения этой проблемы.

См. мой ответ на следующий вопрос в стеке веб-мастеров, который объясняет это далее:

0 голосов
/ 01 февраля 2020

Используйте следующий код в вашем файле .htaccess

RewriteEngine On
#main user page
RewriteRule ^user$ index.php?url=user [L]
#user detail page
RewriteRule ^user/([^/]*)$ index.php?url=$1 [L]
...