Я нахожусь на веб-сервере NGINX и хочу удалить расширение .php
из URL-адреса.
В настоящее время у меня есть следующая конфа:
server {
server_name www.mywebsite.com mywebsite.com;
return 301 https://mywebsite.com$request_uri;
}
server {
listen 443 ssl;
server_name www.mywebsite.com;
return 301 https://mywebsite.com$request_uri;
ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
}
server {
listen 443 ssl;
root /opt/http/nginx/sites/mywebsite/www;
index index.php index.html;
server_name mywebsite.com;
location / {
#rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent;
try_files $uri $uri/ $uri.php?$args;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
location ~* \.(pdf)$ {
expires 30d;
}
client_max_body_size 3M;
ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
error_page 403 /index.php;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
access_log /var/log/nginx/www.mywebsite.access.log;
error_log /var/log/nginx/www.mywebsite.error.log;
}
Если попытаться выполнить некоторые аналогичные инструкции, но, похоже, ничего не работает с моей conf.
Проблема в том, что этот кусок кода
location / {
try_files $uri $uri/ $uri.php?$args;
}
хорошо работает в двух случаях:
- Клиент запрашивает https://mywebsite.com/page.php: OK
- Клиент запрашивает https://mywebsite.com/page: OK
без перезаписи URL!
Что мне нужно, так это сказать NGINX переписать URL-адрес, если клиент попытается получить доступ к странице с расширением файла. Например, если я запрашиваю login.php, nginx перезаписывает «логин» и так далее.
Он также должен сохранять параметры GET в URL-адресе, если он есть.
Итак, какова правильная конфигурация для этого, учитывая, что я сохраняю в своем коде ссылки на php-файлы с расширением, а не относительные URL-адреса (надеюсь, NGINX сможет их переписать)? (если мне нужно установить относительные URL-адреса в моем коде, я могу, но я не хочу нарушать свой локальный)
rewrite ^(/.+)\.php$ $scheme://$host$1 permanent;
в блокserver {}
, и он всегда переписывает URL-адрес без расширения .php! - person Maxime Lafarie   schedule 17.07.2020