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