Мой сайт должен попытаться обслуживать все запросы из подкаталога кеша (/app/storage/cache), чтобы запрос /two.html был отправлен из /app/storage/cache/two.html
Дополнительные примеры:/из /app/storage/cache/index.html/two.html из /app/storage/cache/two.html/папки из /app/storage/cache/folder/index.html
Если файлы/каталоги не найдены, он должен обрабатывать все запросы с помощью php файла /app/router.php
Что я пробовал:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /app/storage/www/$1 [L]
RewriteRule ^(/)?$ /app/storage/www/$1 [L]
что отлично подходит для поиска всех URL-адресов и предоставления правильного ресурса без изменения URL-адреса. Теперь поймать все остальное:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . app/router.php [L]
Это также работает, но тогда первый набор условий больше не работает...
Есть три способа, которыми я могу думать о том, как это сделать. Один из них проверяет кеш через router.php, прежде чем генерировать страницу через этот же файл. Другие два способа включают некоторую переписывающую магию.
Я не тестировал ни одно из них.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /app/storage/www/$1
#From this point on, the file/dir either exists or
#%{REQUEST_FILENAME} is now /app/storage/www/something
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app/storage/www/ /app/router.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/app/storage/www/$1 !-f
RewriteCond %{DOCUMENT_ROOT}/app/storage/www/$1 !-d
RewriteRule ^(.*)$ /app/router.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /app/storage/www/$1 [L]
Оба подхода могут быть ускорены с помощью основного файла конфигурации Apache (httpd.conf) вместо файла.htaccess, так как ему не нужно искать/читать файл.htaccess по каждому запросу.
^
, но в условии использовал $1
Изменение соответствующей части на ^(.*)$
Должно исправить это. Возможно, вам понадобится повернуть информацию о пути при AcceptPathInfo Off
.