location /social {
index index.php;
try_files $uri /social/index.php;
}
当用户点击目录时,需要运行本地./index.php 到目前为止,当人们出现/社交/它运行index.php 当用户访问所有未知网址时,他们会获得/social/index.php
但是,当用户访问/ social / subdir /并且存在/social/subdir/index.php时,它仍会运行/social/index.php。我需要它来运行/social/subdir/index.php
如果我将配置更改为:
location /social {
index index.php;
try_files $uri $uri/index.php /social/index.php;
}
然后nginx将social / subdir / index.php的内容提供为content-type:octet / stream。
我认为index index.php会查找路径索引文件。
php渲染块:
location ~ .php$ { ## Execute PHP scripts
if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss
expires off; ## Do not cache dynamic content
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
答案 0 :(得分:1)
首先从try_files指令中删除index.php,使其看起来像这样
location /social {
index index.php;
try_files $uri $uri/ /social/index.php =404;
}
还要确保没有其他位置块捕获/ social / subdir / request。
最后(与您的问题无关,但非常重要)删除此行
if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss
这完全是多余和邪恶的。 try_files
不会错过404。有关详细信息IfIsEvil
答案 1 :(得分:1)
我认为您的主要问题是您没有在http://
之前使用127.0.0.1:9000
,还要确保您的php使用端口9000而不是sock文件,否则您更改了fastcgi_pass
unix socket。
这是我的简化配置。
如果index index.php
块中的/social
块中的server
块相同,则从location /social {
# index index.php; # remove if not needed
try_files $uri $uri/ /social/index.php;
}
location ~* \.php$ {
include fastcgi_params;
fastcgi_pass http://127.0.0.1:9000;
}
块移除{。}}。
{{1}}