RewriteCond% {REQUEST_FILENAME}! -F не ​​работает - PullRequest
0 голосов
/ 28 мая 2020

Я написал следующие правила для перенаправления на URL-адрес в нижнем регистре, если какой-либо символ в URL-адресе является верхним регистром

RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule . https://www.example.com${lc:%{REQUEST_URI}} [R=301,L] 

Вышеупомянутое правило может перенаправить https://www.example.com/HelloWorld на https://www.example.com/helloworld

Это правило выше работало отлично, но затем я хотел отложить нижний регистр для всех URL-адресов, которые соответствуют фактическим URL-адресам файлов. Например, я хотел отложить указанное выше правило для

https://www.example.com/ABC.png, если файл AB C .png действительно существует на сервере.

Для этого я добавил строку RewriteCond %{REQUEST_FILENAME} !-f, как показано ниже

RewriteMap lc int:tolower
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule . https://www.example.com${lc:%{REQUEST_URI}} [R=301,L]

Несмотря на вышеуказанное изменение https://www.example.com/ABC.png перенаправляется на ttps: // www.example.com/abc.png. Это должно быть очень просто, но не работает.

1 Ответ

0 голосов
/ 29 мая 2020

Исправлено. Когда вы используете RewriteCond %{REQUEST_FILENAME} !-f в контексте виртуального хоста, вы должны записать его как RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f. Таким образом, общее правило будет в этом случае

RewriteMap lc int:tolower
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule . https://www.example.com${lc:%{REQUEST_URI}} [R=301,L]
...