Я использую следующие настройки для перезаписи 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
Я думаю, у вас есть две проблемы (поскольку данные ответы еще не решили вашу проблему …):
Вы переписываете все имена файлов, поэтому, когда браузер запрашивает css/index.css
ваши преобразования переписывают это index.php?url=css/index.css
. Ответ @ cOle2 должен решить это.
Вы не используете абсолютные пути для ваших файлов 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 недоступен браузером, поэтому вам необходимо:
project/public
каталог (например, project/public/css
) /css/index.css
. Комментарий не позволяет мне форматировать код, можете ли вы попробовать это:
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]