我如何从nginx中的URL中删除文件扩展名?

qq24tv8q  于 2023-03-01  发布在  Nginx
关注(0)|答案(3)|浏览(204)

假设我有一个名为careers.php的文件,当他们单击一个指向http://example.com/careers的链接时,如果.html.php文件的扩展名都不带nginx,我该如何提供该文件?
1.请注意,解决方案必须考虑查询字符串,例如,URL可能是http://example.com/careers?lang=fr
1.此外,我希望解决方案也尝试子目录以及。如果我在服务器上的文件夹结构是/views/careers.php,我希望http://example.com/careers仍然为/views/careers.php服务。
我的当前配置如下所示:

server {
    listen 80 default_server;

    root /usr/share/nginx/landing-page;
    index index.php index.html;

    server_name example.com;

    location / {
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
ar7v8xwq

ar7v8xwq1#

一个常见的解决方案是使用带有命名位置的try_files。现有的location ~ \.php$块用于处理.php文件。还要避免使用任何if语句。

location / {
    try_files $uri $uri/ @rewrite;
}
location @rewrite {
    rewrite ^ $uri.php last;
}
location ~ \.php$ {
    try_files $uri =404;
    ...
}
vm0i2vca

vm0i2vca2#

您可以使用try_files

try_files $uri $uri.php $uri/ =404;
deikduxw

deikduxw3#

我知道这是一个老职位,但我觉得这是从来没有完美的解释或解释使用最简单的解决方案。
下面是一个示例,说明我是如何为托管在Digital Ocean上的Portfolio网站使用nginx提供服务的React应用程序实现这一点的。
当简化后,它是超级容易完成的。位置块应该看起来像这样。

//Originally my location block was set up like this

location /chatgpt-homepage.html {

   root /var/www/myportfoliowebsite.com/html/chatgpt-app-homepage/build;

}

  
//What needs to happen is you need to remove the .html from your location

//and

//Add try_files $uri $uri.html $uri/ =404; underneath your root section of code

  
//New Location Block example below

location /chatgpt-homepage {

   root /var/www/myportfoliowebsite.com/html/chatgpt-app-homepage/build;

   try_files $uri $uri.html $uri/ =404;

}

相关问题