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

时间:2016-07-04 16:22:48

标签: nginx

我们说我有一个名为http://example.com/careers的文件,当我们点击.html的链接而没有.php的文件扩展名时,如何提供此文件?和 nginx http://example.com/careers?lang=fr个文件?

  1. 请注意,解决方案必须考虑查询字符串。例如,网址可能是/views/careers.php

  2. 另外,我也想尝试使用子目录的解决方案。例如;如果服务器上的文件夹结构为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; } }

  3. 我当前的配置如下所示:

    declare
        l_row_check integer := 0;
    begin
        select count(*) into l_row_check from main
        where  rownum = 1;
    
        if l_row_check = 0 then
            execute immediate 'truncate table main';
    
            insert --+ append 
            into main
            select * from temp;
    
            execute immediate 'truncate table temp';
        end if;
    end;
    

2 个答案:

答案 0 :(得分:1)

您可以使用try_files

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

答案 1 :(得分:1)

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

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