Я пытаюсь создать конфиги vhost Nginx, которые будут включать эквивалент правил перезаписи Apache htaccess для OpenCart. Вот оригинал:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
Насколько я понимаю, это говорит о том, что если запрос не является файлом, и это не каталог, и не содержит файла с одним из вышеуказанных расширений, то перепишите в соответствии с последней строкой.
Вот что я сейчас использую в Nginx:
location / {
# This try_files directive is used to enable SEO-friendly URLs for OpenCart
try_files $uri @opencart;
}
location @opencart {
rewrite ^/(.+)$ /index.php?_route_=$1 last;
}
Кажется, это работает, но я обеспокоен тем, что проверка этих определенных файлов отсутствует. Ничего из того, что мне удалось найти, не предлагает способ воспроизвести это условие без использования IF. Я также не уверен в причине этой части условий, то есть почему эти конкретные файлы имеют значение.
Мои вопросы:
Есть ли способ сделать это, т.е. написать Nginx, эквивалентный условию, касающемуся этих типов файлов, без использования IF?
Если первый блок местоположения моего примера Nginx будет изменен на try_files $ uri $ uri / @opencart; (добавляя $ uri /)
Спасибо за любую помощь.
Цель этого конкретного RewriteCond
состоит в том, чтобы предотвратить запросы на несуществующий статические файлы передаются в OpenCart.
Вы можете сделать это с другим location
. Например (с головы до ног, поэтому может потребоваться настройка):
location ~ \.(ico|gif|jpg|jpeg|png|js|css)$ {
try_files $uri =404;
}