【问题标题】:How to remove .php extensions in nginx config?如何删除 nginx 配置中的 .php 扩展名?
【发布时间】:2016-02-18 20:12:08
【问题描述】:

我知道有很多关于这个主题的话题,但似乎没有一个适合我。我不确定是不是因为我必须对两个服务器块都这样做,或者我做错了什么。请帮帮我。

下面是我在亚马逊远程服务器上的 nginx 配置,第一个块代表后端,第二个块代表前端:

limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:60m; # nginx 1.1.9 or higher
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:60m rate=20r/s;

server {
    listen 8080;

    server_name api.commonskudev.com;

    root /var/www/api/public;

    gzip on;

    server_tokens off;

    index index.php;

    client_max_body_size 64M;
    fastcgi_read_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
    send_timeout 300;

    try_files $uri $uri/ @rewrite-staging;

    location @rewrite-staging {
        rewrite ^ /index.php;
    }

    location ~* \.php$ {
        include fastcgi_params;
#        fastcgi_param HTTPS on;
        fastcgi_pass 127.0.0.1:9000;
    }
}

server {
    listen 443 default_server ssl;
    server_name rightsleeve.commonskudev.com;
    # rewrite ^ http://commonskudev.com/maintenance.html;

    ssl on;
    # ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
    # ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
    ssl_certificate /etc/nginx/csku-dev.crt;
    ssl_certificate_key /etc/nginx/csku-dev.key;

    gzip on;
    gzip_proxied any;

    client_max_body_size 64M;
    fastcgi_read_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
    send_timeout 300;

    root /var/www/web;

    server_tokens off;

    index index.php;

    error_page 404 /404.php;

    rewrite ^/v[0-9]+\.[0-9]+/(.*)$ /$1;

    rewrite ^/project/([0-9]+) /project.php?job_number=$1;

    if ($http_referer ~* "semalt\.com") {
        return 444;
    }

    location ~* ^(css|js|images|files) {
        expires 1y;
        add_header Pragma public;
        add_header Cache-Control public;
    }

    location ~* \.(ttf|woff) {
        add_header Access-Control-Allow-Origin "*";
    }

    location ~* \.php$ {
        if (!-f $document_root/$fastcgi_script_name) {
            return 404;
        }

        limit_conn conn_limit_per_ip 35;
        limit_req zone=req_limit_per_ip burst=35;

        include fastcgi_params;
        fastcgi_param HTTPS on;
        fastcgi_pass 127.0.0.1:9000;
    }

    location ~* \.(png|jpg|dst|xls) {
        try_files $uri $uri/ @nofile;
    }
    location @nofile {
        rewrite ^ /images/404.png;
    }

    if ($uri ~* ^/([a-zA-Z0-9_\-]+)$) {
        rewrite ^/([a-zA-Z0-9_\-]+) /vanity_url.php?mask=$1&$args;
    }

    location /v1 {
        proxy_pass http://api.commonskudev.com:8080;
        proxy_set_header Host $host;
    }
}

server {
    listen 80 default_server;
    server_name rightsleeve.commonskudev.com;
    rewrite ^(.*) https://$host$1 permanent;
}

【问题讨论】:

    标签: php nginx


    【解决方案1】:

    你可以使用类似这样的重写:

    location / {
        try_files $uri $uri.html $uri/ @extensionless-php;
        index index.html index.htm index.php;
    }
    
    location ~ \.php$ {
        try_files $uri =404;
    }
    
    location @extensionless-php {
        rewrite ^(.*)$ $1.php last;
    }
    

    取自this SO答案。

    【讨论】:

    • 我以前见过这个,但我希望对现有配置进行尽可能少的修改。我理解这个概念,但应用它并没有帮助。
    • 您不能在不修改配置文件的情况下执行此操作。另外,您想用另一个替换或完全删除扩展?
    • @peixotorms 如果我可以完全删除扩展程序会很好。我发布的配置不是由我完成的,因此我希望尽可能减少对配置的破坏并删除扩展。
    猜你喜欢
    • 2016-11-03
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多