Htaccess — Несуществующие Файлы Изображений Не Обрабатываются Php Должным Образом Из-За Конфигурации Ngnix.

  • Автор темы Troha
  • Обновлено
  • 23, Oct 2024
  • #1

В настоящее время я создаю веб-приложение. Чтобы это работало правильно, я написал следующее правило:

 
 
 server {

rewrite_log on;

# IPv4

listen 80;

listen 443 ssl;

# IPv6

# listen [::]:80 ipv6only=on;

# listen [::]:443 ssl ipv6only=on;

server_name test.test;

# SSL

ssl_certificate /etc/ssl/private/ssl-bundle.test.test.crt;

ssl_certificate_key /etc/ssl/private/test.test.key;

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers HIGH:!aNULL:!MD5;

root /var/www/test;

index index.php index.html index.htm;

try_files $uri $uri/ $uri/index.php $uri/index.html $uri/index.htm =404;

disable_symlinks off;

location / {

if (!-e $request_filename) {

expires 168h;

add_header Pragma public;

add_header Cache-Control "public, must-revalidate, proxy-revalidate";

rewrite ^(.*)$ /libraries/render.php;

}

}

location = /config.inc.php {

internal;

}

location /cache/ {

internal;

}

location /libraries/ {

internal;

}

location /images/ {

internal;

}

location ~ \.php$ {

try_files $uri =404;

fastcgi_split_path_info ^(.+\.php)(/.+)$;

# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

# With php5-cgi alone:

#fastcgi_pass 127.0.0.1:9000;

# With php5-fpm:

fastcgi_pass unix:/var/run/php5-fpm.sock;

fastcgi_index index.php;

include fastcgi_params;

}

location ~ /\.ht {

deny all;

}

location ~ /\.sh {

deny all;

}

location ~* \.html$ {

expires -1;

}

location ~* \.(?:gif|jpe?g|png|ico)$ {

expires 168h;

add_header Pragma public;

add_header Cache-Control "public, must-revalidate, proxy-revalidate";

}

# Rewrites

rewrite ^(?<filename>.+\.(?<type>css|js))$ /compress.php?file=$filename&type=$type;
}
 

Он работает для URL-адресов с несуществующими файлами, например: .png but not for a non-existent image: render.php

У меня есть второе правило, которое может влиять на изображения:

location ~* \.(?:gif|jpe?g|png|ico)$ { expires 168h; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; }

Но я не уверен, как это предотвратит срабатывание правила перезаписи. Это все расширения в этом правиле, которые не перенаправляются на http://test.test/test.png
Когда я удаляю это правило (закомментировав его), все расширения, кроме http://test.test/test work. This is very strange.

Это вся моя конфигурация:

location / { if (!-e $request_filename) { expires 168h; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; rewrite ^(.*)$ /libraries/render.php; } }

#php #htaccess #images #переписывание URL #nginx

Troha


Рег
26 Nov, 2008

Тем
72

Постов
182

Баллов
582
  • 26, Oct 2024
  • #2

Итак, после некоторых проб и ошибок я нашел работающее решение, которое меня не совсем устраивает. Но, по крайней мере, это работает.

Поскольку все «настоящие» изображения расположены в

 
  location ~* ^/includes/.+\.(?:gif|jpe?g|png|ico)$ {

expires 168h;

add_header Pragma public;

add_header Cache-Control "public, must-revalidate, proxy-revalidate";

}
 
or subdirectories I simply rewrote the rule for the images.

Итак, это

location ~* \.(?:gif|jpe?g|png|ico)$ { expires 168h; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; }

Был превращен в это

/includes/
 

Sergio1993


Рег
29 Jun, 2006

Тем
54

Постов
196

Баллов
526
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно