Intereting Posts
JqGrid PHP: выделять результаты при фильтрации через панель инструментов PHP Slim Framework Создать контроллер получение значения радиокамера в php Каков наилучший способ проверить, существует ли таблица в DynamoDB? Импланирование ассоциативного массива в PHP Отображение сообщений об ошибках в Laravel после перенаправления с контроллера Модификация регулярного выражения для соответствия времени PHP: использование одинарных кавычек и двойных кавычек в одной строке Как отсортировать массив в PHP по значению, которое находится внутри форматированной строки json? Почему putenv () необходим для уже заданной переменной среды? как я могу использовать часовой пояс в фильтре даты Twig? Невозможно сбросить запрос, чтобы показать сообщение ramdom после первого цикла WordPress Параметр pass от php до casperjs / phantomjs Импорт нескольких CSV-файлов в таблицы mysql Столбец обновления MySQL только если значение не пустое, где

Url rewriting сломал ссылку на css

Я использую следующие настройки для перезаписи URL:

RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

В index.php используется parse $_GET['url'] так что в следующих примерах:

 ROOT/user/id/1/name/bobby // user is the page, id = 1, name = bobby ROOT/blog/post/123/title/welcome // blog is the page, post = 123, title = welcome 

Так что первый параметр (? I не знаю, как его назвать) – это имя страницы, тогда следующие пара параметров похожи на «keys / value». Теперь, когда я просматриваю ROOT/ ссылку на таблицы стилей, вставленные в html страницы, и страница отображается правильно. Я просматриваю ROOT/index (это то же самое, что и ROOT/ ), он показывает страницу (с содержимым и другим материалом) правильно, но ссылки (даже если в структуре html правильно написаны) в таблицы стилей не загружаются. И я вижу это из-за того, что моя страница вообще не имеет CSS, когда я ее загружаю.

Как я могу это исправить?

РЕДАКТИРОВАТЬ

Путь файла css выглядит следующим образом:

 project/view/css/common.css 

Файл, в который он входит, находится в

 project/public/index.php // the one with .htaccess and rewrite rules 

Это приводит меня к созданию ссылки (внутри index.php), такой как

 ../view/css/common.css 

Но это работает в зависимости от того, как выглядит URL. Например:

 # For URL = public/ project/view/css/common.css // good # For URL = public/index/ project/public/view/css/common.css // broken # For URL = public/index/key/value project/public/index/key/view/css/common.css // broken 

Я думаю, у вас есть две проблемы (поскольку данные ответы еще не решили вашу проблему …):

  1. Вы переписываете все имена файлов, поэтому, когда браузер запрашивает css/index.css ваши преобразования переписывают это index.php?url=css/index.css . Ответ @ cOle2 должен решить это.

  2. Вы не используете абсолютные пути для ваших файлов css. Сервер переводит запрошенную страницу, например /user/id/1/name/bobby в /index.php?etc.... но когда браузер запрашивает, например, файл css, что-то вроде css/index.css в вашем кода, он действительно запросит /user/id/1/name/bobby/css/index.css и этот файл не существует. Вы можете решить это, используя только абсолютные пути к вашим внешним файлам (css, js, images и т. Д.), Например /css/index.css .

Изменить. Основываясь на ваших комментариях, оба пути являются относительными, а ваш css недоступен браузером, поэтому вам необходимо:

  1. Переместите css в project/public каталог (например, project/public/css )
  2. Используйте абсолютные пути к вашему css, например /css/index.css .
  3. Убедитесь, что URL-адреса ваших внешних файлов не переписаны сервером.

Комментарий не позволяет мне форматировать код, можете ли вы попробовать это:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^.*\.(css|jpe?g|gif|png|js|ico)$ [NC] RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

Обновить

Вы можете попробовать что-то вроде этого в разделе <head> на ваших страницах для поддержки относительного пути для ваших файлов image / css / js, указанных на этой странице:

 <head> <base href="http://www.example.com/static-files/" /> </head> 

Вы можете попробовать удалить определенные расширения файлов из правила перезаписи, например, следующее правило будет игнорировать изображения, css и js-файлы.

 # Do not process images or CSS files further RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L] 

Изменить: вот как я применил бы это:

 RewriteEngine On RewriteRule \.(css|jpe?g|gif|png|js|ico)$ - [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]