Ниже приведена структура каталогов моего сайта:
htdocs/
My-Project/
.htaccess
public/
css/
img/
img.jpg
js/
index.php
...(other stuff)
Я хочу использовать файл .htaccess, чтобы проверить, является ли запрошенный путь файлом в каталоге public / (аналогично обслуживанию статических файлов из каталога в выражении с помощью express.static) . Если да, обслужите это, иначе перешлите запрос к /index.php.
В основном мою проблему можно разделить на следующие подзадачи:
Подзадача1: обслуживать только файлы из общего каталога , иначе направлять в index.php
Подпроблема 2: обслуживать эти файлы из общедоступного каталога без необходимости (public) в URL-адресе
Таким образом, /My-Project/img/img.jpg
следует переписать в /My-Project/public/img/img.jpg
, но /My-Project/notexisting.file
или /My-Project/test
следует переписать в /My-Project/index.php
.
До сих пор это была моя идея:
RewriteEngine On
#Block 1
#Condition: File exists in public directory
RewriteCond %{DOCUMENT_ROOT}/My-Project/public/$1 -f
RewriteRule ^(.*)$ public/$1 [L]
#Block 2
#Condition: File doesn't exist in public directory
RewriteCond %{DOCUMENT_ROOT}/My-Project/public/$1 !-f
RewriteRule ^(.*)$ index.php [L,QSA]
Когда Block 1
стоит отдельно -> SubProblem2 решается, но как только добавляется Block 2
для решения SubProblem1, каждый запрос переписывается в index.php. Почему это происходит? Почему второй RewriteCond не работает должным образом?