Я действительно понял, что проблема в том, что public / не находится в корневом каталоге. Он находится в том же каталоге, в котором находится .htaccess. Есть ли способ получить каталог, в котором находится .htaccess, поэтому он может работать в разных местах, не требуя ручного изменения .htaccess для каждого?
Вы можете сделать это подзапросом. Флаг -F
будет относить относительные пути относительно каталога, в котором находится .htaccess. Итак:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond public/$0 !-F
RewriteRule ^(.*)$ index.php?$1 [L,B]
Обратите внимание, что -F
подразумевает большее снижение производительности, чем -f
, так как вместо просто статистики генерируется подзапрос. Вам также следует добавить флаг B
, чтобы избежать обратной ссылки.