当前位置: 首页 > 知识库问答 >
问题:

删除. php扩展与NGINX

施自怡
2023-03-14

我在nginxweb服务器上,我想删除。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;
}

在两种情况下运行良好:

  1. 客户要求https://mywebsite.com/page.php:好的
  2. 客户要求https://mywebsite.com/page:好的

不重写url!

如果客户端试图访问具有文件扩展名的页面,我需要告诉NGINX重写url。例如,如果我要求登录。php、nginx重写“登录”,等等。

如果有,它还必须在url中保留GET参数。

那么,考虑到我在代码中保留了指向带有扩展名的php文件的链接,而不是相关URL(我希望NGINX可以重写它们),那么正确的配置是什么呢?(如果我需要在代码中设置相对URL,我可以,但我不想破坏我的本地URL)

共有2个答案

轩辕天佑
2023-03-14
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;
    }

这将删除html和php表单url。更多细节

薄瑞
2023-03-14

由于这个问题和评论,我能够找出一个类似的问题,同样的结果还有一些额外的限制,比如不使用ifs或try_文件。下面是我最后得到的:

upstream php {
    server unix:/var/run/php-fpm/php-fpm.sock;
}

server {
#    ...

rewrite ^(/.+)\.php$ $scheme://$host$1 permanent;

location / {
    rewrite ^(.*)$ /$1.php;
}

location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass    php;
}

主要原因是重写中缺少中断/最后一次。

 类似资料:
  • 问题内容: 假设我有一个删除扩展名的方法,我需要两个变量的结果,一个是域名,另一个是扩展名。 我尝试过但不起作用,我猜只能用正则表达式.... 问题答案: 这将产生以下数组

  • 我一直在尝试让nginx在没有. php或. html扩展的情况下工作,我需要一点帮助。提前感谢您的时间! 我尝试了在如何使用NGINX从url中删除. php和. html扩展中找到的解决方案?但是没有效果 这是我当前的nginx配置。这是几个教程的组合,但它是有效的。

  • 我知道有很多关于这个话题的帖子,但似乎没有一条适合我。我不确定这是否是因为我必须对两个服务器块都这样做,或者我做错了什么。请帮帮我。 下面是我在Amazon远程服务器上的nginx配置,第一个块表示后端,第二个块表示前端:

  • 问题内容: 给定一个文件名,例如: 我想删除扩展名(如果存在)。我怎样用Java做这个?谢谢! 问题答案: 就像是 索引检查可避免将“ ” 等隐藏文件转换为“”,并避免使用诸如的名称。

  • 问题内容: 在托管的IIS7环境中,我正在寻找使用无扩展名文件名的最简单方法。简单来说,我有以下页面: index.html(或.aspx)-> domain.com gallery.html-> domain.com/gallery videos.html-> domain.com/videos等… 我只有很少的页面,没有动态代码,没什么特别的。我发现的所有示例或在开发的其他站点中使用的方法都围

  • 我有一个nginx服务器正在运行,希望删除。我的文件中的php扩展名。我已经尝试了一些方法,但我唯一能做到的就是打破fastcgi过程,下载php文件。服务器在以下配置下运行正常: 谢谢你的努力和时间。