1

我想重写nginx中的url,以便.php可以省略扩展名。

这就是我所拥有的,但这对我不起作用。任何人都知道如何做到这一点?

谢谢。

  server {
        listen 80;
        server_name example.com;
        return 301 $scheme://www.example.com$request_uri;       
}

server {
        listen   80;
        root /usr/share/nginx/www;
        index index.php;
        server_name www.example.com;
        error_page 404 http://www.example.com/404.php;
        autoindex off;
        error_log  /usr/share/nginx/www/nginx_error.log  warn;

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

    location = / {
        rewrite ^ /index.php;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

}

这是我的整个配置文件。

4

3 回答 3

3

@Makromat 我认为您在评论中提到的 404 问题是您的/位置正在解析为/.php没有文件名,因此为了解决它,我们可能会添加另一个位置来处理这种特殊情况

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

试试这个,告诉我它是否有效

编辑:

好的,我有一个更好的主意,如果原始 URL 已经包含.php扩展名,则第一种情况将失败,因此最好将其定义为后备解决方案,试试这个

location / {
    try_files $uri $uri.php $uri/;
}

尝试将其替换为您当前的 php 块

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}
于 2013-11-14T12:47:54.210 回答
3

花了一段时间试图让它正常工作。php 文件和其他资产都在工作:

location / {

    if (!-e $request_filename){
        rewrite ^(.*)$ /$1.php;
    }
    try_files $uri $uri/ /index.php?$query_string;
}
于 2014-10-09T00:40:04.623 回答
0

像这样的东西应该是你正在寻找的东西。

location ^/(.*)$ {
  rewrite ^(.*)$ /$1.php;
}
于 2013-11-14T11:32:49.720 回答