Я запускаю веб-сайт, использующий Nginx с PHP, и пытаюсь заблокировать ручной доступ к URL-адресам с расширением .php. Моя цель — вернуть ошибку 404, когда пользователи добавляют .php к URL-адресу, но позволить чистым URL-адресам (без .php) работать правильно. Например:
https://example.com/login.php → должен возвращать 404.
https://example.com/login → должен работать и обслуживаться внутри компании. login.php.
Однако в конфигурациях, которые я пробовал, либо возникает цикл перенаправления, либо появляется ошибка 404, и чистые URL-адреса не работают должным образом.
server {
`root /var/www/html/example;
index index.php index.html;
server_name example.com www.example.com;
# Block manual access to .php URLs and return 404
location ~* \.php$ {
return 404;
}
# Direct clean URLs to .php files (e.g., /login → login.php)
location / {
try_files $uri $uri/ /$uri.php?$args;
}
# Process PHP files (internally)
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;`
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... bsite-link