одностраничная запись htaccess, не обслуживающая статические файлы

#php #apache #.htaccess

#php #apache #.htaccess

Вопрос:

Я создаю одностраничную точку входа в PHP. Маршруты работают просто отлично, но статические файлы, такие как Js и CSS, возвращают 404. Я не знаю, связано ли это с перенаправлением htaccess.

Вот код файла htaccess:

 RewriteEngine on
RewriteCond ${REQUEST_URI} !.(?:css|png|js|jpe?g|gif)$ [NC]
RewriteRule ^([a-zA-Z0-9-_/]*)$ index.php?p=$1
RewriteCond ${REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]
  

Ответ №1:

Попробуйте без первого RewriteRule:

 RewriteEngine on
RewriteCond ${REQUEST_URI} !.(?:css|png|js|jpe?g|gif)$ [NC]
RewriteCond ${REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]
  

Комментарии:

1. кстати, вижу ваш пост спустя долгое время 🙂

Ответ №2:

При этом проверяется, относится ли запрос к файлу или каталогу, и если нет, он перенаправит его в index.php

 RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]
  

Комментарии:

1. Это сработало, но с небольшими изменениями: RewriteEngine на RewriteCond %{REQUEST_FILENAME} ! -f RewriteCond %{REQUEST_FILENAME} ! -d RewriteRule ^.*$ ./index.php [NC, L, QSA]

Ответ №3:

Вы можете настроить свои правила перезаписи так, чтобы они применялись только к определенным файлам, которые не существуют, а другие вы можете перенаправить на index.php (или любая желаемая страница). Любой другой файл будет отображаться по желанию…

 RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,NC,L]
  

Затем вы можете использовать a require() для запроса любого типа файла, который мог быть запрошен, будь то index.php или someOtherScript.php .