В моем проекте (Silex) есть web/index.php
и активы в web/css/*
, web/img/*
и т. Д. Я поместил следующий файл .htaccess
в корень общедоступной html-папки:
<IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteBase web RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L] </IfModule>
Каждый запрос должен быть переписан в веб-папку ( RewriteBase web
директива RewriteBase web
), и если файл не существует ( !-f
), он должен быть перенаправлен на передний контроллер.
Это не работает:
<img src="/img/myimage.png" alt="" />
Файл myimage.png
существует, но запрос для /img/myimage.png
дает мне папку 404. Если я /web/img/mmyimage.png
путь к /web/img/mmyimage.png
он работает.
Есть что-то, что мне не хватает?
Вы можете попытаться вручную маршрутизировать папки css и img:
RewriteCond %{DOCUMENT_ROOT}/web%{REQUEST_URI} -f RewriteRule ^(css|img) /web%{REQUEST_URI} [L]
Вам нужно добавить это прямо перед условием для правила маршрутизации index.php.
Замените свой .htaccess на этот код:
Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / ## If the request is for a valid directory RewriteCond %{REQUEST_FILENAME} -d [OR] ## If the request is for a valid file RewriteCond %{REQUEST_FILENAME} -f [OR] ## If the request is for a valid link RewriteCond %{REQUEST_FILENAME} -l ## don't do anything RewriteRule ^ - [L] # if requested files exists in /web then forward it there RewriteCond %{DOCUMENT_ROOT}/web/$1 -f RewriteRule ^(.+?)/?$ /web/$1 [L] # if requested files doesn't exist in /web then forward it to index.php RewriteCond %{DOCUMENT_ROOT}/web/$1 !-f RewriteRule ^(.+?)/?$ /web/index.php [L]
если ваш сервер работает Apache> = 2.2.16, вы можете использовать:
FallbackResource /index.php
в вашем .htaccess вместо
<IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteBase web RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L] </IfModule>
См. Также fallbackresource Apache: ваша новая команда .htaccess для получения дополнительной информации.
Вам нужно сменить веб-сайт на веб-сайт, как упомянуто Kyra.
Параметры -Многопроцессоры
RewriteEngine On RewriteBase /web RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]
Но это не решит вашу проблему.
Основная проблема заключается в том, что ваш DocumentRoot указывает на / path / to / project, и он должен указывать на / path / to / project / web
Мне удалось исправить это с помощью этих строк:
<IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{DOCUMENT_ROOT}/web/$1 -f RewriteRule ^(.+?)/?$ /web/$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ web/index.php [QSA,L] </IfModule>