Правила Htaccess переопределяются - PullRequest
0 голосов
/ 18 ноября 2018

Я хочу, чтобы мой .htaccess в корневом каталоге веб-сервера перенаправлял любой запрос, начиная с ^assets/(.*)$, в папку public/$1.Все остальные запросы должны идти на index.php?request=$1.Я также хочу сохранить параметры получения (флаг L делает это) в этом случае.

RewriteEngine on

RewriteBase /

RewriteRule ^assets/(.*)$ public/$1 [QSA,L]

RewriteRule ^(?!assets)(.*)$ index.php?request=$1 [L,QSA]

Единственная проблема в том, что последняя строка переопределяет предыдущую: / Я также тестировал с (.*), но безуспешно.Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 18 ноября 2018

Попробуйте:

RewriteEngine on

RewriteRule "^/assets/(.*)$" "/public/$1" [L,QSA]

RewriteCond %{REQUEST_URI} "!^/assets/"
RewriteCond %{REQUEST_URI} "!^/index.php"
RewriteCond %{REQUEST_URI} "!^/public"
RewriteRule (.*) "/index.php?request=$1" [L,QSA]
  • QSA: добавляет параметры к переписанной части
  • L: последняя.Это означает, что если оно совпадает, не обрабатывайте другие операции перезаписи.
  • Перезаписи начинаются с /
  • Чтобы применить условие к RewriteRule, используйте RewriteCond

Ссылки:
https://httpd.apache.org/docs/2.4/rewrite/flags.html
https://httpd.apache.org/docs/current/mod/mod_rewrite.html

Первое правило гласит:

  • , если оно начинается с "/ assets /", все, что следует засекунда / будет переписана как "/public/$1".

RewriteCond и RewriteRule сообщают:

РЕДАКТИРОВАТЬ 19 ноября 1115

Добавленовторой RewriteCond, чтобы убедиться, что «/index.php» не переписывает сам себя.И третье, если вы хотите, чтобы «/ public» также не перенаправлял на «/index.php".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...