我试图让Nginx处理没有扩展名的php文件(即处理http:// localhost/sample的方式与处理http://localhost/sample.php的方式相同).
这是我的网站配置:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name localhost;
root /var/www;
index index.html index.php;
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location / {
try_files $uri $uri/ $uri.html @extensionless =404;
}
location @extensionless {
rewrite ^(.*)$ $1.php last;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知它应该做的伎俩.但是 - 它没有.尝试http:// localhost/sample只是让我到404页面(而http://localhost/sample.php工作正常).
打开调试时,我在日志中看到以下内容:
2015/07/19 15:37:00 [debug] 4783#0: *1 http script var: "/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use file: "/sample" "/var/www/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 http script var: "/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use dir: "/sample" "/var/www/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 http script var: "/sample"
2015/07/19 15:37:00 [debug] 4783#0: *1 http script copy: ".html"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use file: "/sample.html" "/var/www/sample.html"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use file: "@extensionless" "/var/www@extensionless"
2015/07/19 15:37:00 [debug] 4783#0: *1 trying to use file: "=404" "/var/www=404"
Run Code Online (Sandbox Code Playgroud)
这很奇怪.它基本上看起来像@extensionless被视为纯文件名(而不是导致重写URL的位置).
我错过了什么?:) 谢谢!
只是更新(如果有人发现这个有用)我最终会让它工作.
这是诀窍的配置:
server {
listen 80;
root /var/www;
index index.html index.htm index.php;
server_name localhost;
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /$1.php;
}
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)try_files $uri $uri/ $uri.html @extensionless =404;
是的,@extensionless是对待像一个正常的文件,那是因为你需要添加额外的=404后@extensionless内try_files-的@extensionless部分将只作为内部重定向到另一个上下文中的最后一个参数的工作。
如果您不仅希望支持不.php带的处理请求,而且还.php希望剥离所有请求,则可能需要执行以下操作:
location / {
if (-e $request_filename.php){
rewrite ^/(.*)$ /$1.php;
}
}
location ~ \.php$ {
if ($request_uri ~ ^/([^?]*)\.php(\?.*)?$) {
return 302 /$1$2;
}
fastcgi_...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6479 次 |
| 最近记录: |