我想重写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;
}
}
这是我的整个配置文件。
答案 0 :(得分:3)
花了一段时间试图让它正常工作。 php文件和其他资产都在工作:
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /$1.php;
}
try_files $uri $uri/ /index.php?$query_string;
}
答案 1 :(得分:2)
@Makromat我认为您在评论中提到的404问题是您的/
位置正在解析为/.php
而没有文件名,因此要解决此问题,我们可能会添加另一个位置来处理这个特例
location / {
rewrite ^(.*)$ /$1.php;
}
location = / {
rewrite ^ /index.php;
}
试试这个并告诉我它是否有效
修改强>
好了,我有一个更好的主意,如果原始网址已包含.php
扩展名,第一种情况将会失败,因此最好将其定义为后备解决方案,试试这个
location / {
try_files $uri $uri.php $uri/;
}
尝试将其替换为您当前的php块
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
答案 2 :(得分:0)
这样的事情应该是你想要的。
location ^/(.*)$ {
rewrite ^(.*)$ /$1.php;
}