Флаг RewriteRule Last [L] не учитывается? - PullRequest
0 голосов
/ 09 июля 2020

Я создал структуру php, которая хорошо работает на сервере IIS, а RewriteRules отлично работают с web.config.

Но те же правила не работают на сервере apache с .htaccess, и я не понимаю, почему ... вот они:

Options +FollowSymlinks

RewriteEngine On

RewriteRule picture/([a-zA-Z0-9]+)/([a-zA-Z\-0-9/]+).(jpg|png|gif)    app/Src/$1Bundle/public/img/$2.$3 [L]
RewriteRule picture/([a-zA-Z\-0-9/]+).(jpg|png|gif)    public/$1.$2 [L]
RewriteRule scripts/([a-zA-Z0-9]+)/(js|css|typo)/([a-zA-Z\-0-9=\./]+).(js|css) app/Src/$1Bundle/public/$2/$3.$4 [L]
RewriteRule scripts/(js|css|typo)/([a-zA-Z\-0-9=\./]+).(js|css) public/$1/$2.$3 [L]
RewriteRule scripts/(fonts)/([a-zA-Z\-0-9=\./]+).(eot|svg|ttf|woff)   public/$1/$2.$3 [L]
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Я пробовал это решение (и многие другие) ( Флаг RewriteRule Last [L] не работает? ), но это не сработало.

RewriteCond %{ENV:REDIRECT_STATUS} != 200

Идеи кончились ...

1 Ответ

1 голос
/ 09 июля 2020
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Ваше последнее правило (которое перезаписывает все ) выполняется без каких-либо условий, так что это приведет к перезаписи l oop (ответ с ошибкой 500).

По крайней мере, вам нужно предотвратить дальнейшую перезапись запросов на index.php. Например:

RewriteRule ^index\.php$ - [L]
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Но вы, вероятно, также хотите, чтобы ваши stati c ресурсы также оставались доступными напрямую? Таким образом, исключение запросов, которые сопоставляются с физическими файлами и каталогами, является обычным требованием. Например:

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
RewriteRule picture/([a-zA-Z0-9]+)/([a-zA-Z\-0-9/]+).(jpg|png|gif)    app/Src/$1Bundle/public/img/$2.$3 [L]

Вы также пропустили любые привязки начала строки (^) и привязки конца строки ($) из ваши RewriteRule выкройки . Это потенциально может привести к слишком большому совпадению - даже совпадению с переписанным URL - другим l oop. Вы должны быть более конкретными c в сопоставлении с шаблоном.

...