使用重写规则从url中删除.php

我想在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; } } 

这是我的整个configuration文件。

@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; } 

花了一段时间,试图让这个工作正常。 这两个PHP文件和其他资产的工作:

 location / { if (!-e $request_filename){ rewrite ^(.*)$ /$1.php; } try_files $uri $uri/ /index.php?$query_string; } 

像这样的东西应该是你在找什么。

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