Debian Jessie上的Nginx 1.6.2
我想将所有 example.com/forum / 请求映射到 / path / to / htdocs / phpbb 并切断 / forum / 参与URI。 Stackoverflow上的某个人推荐“重写”解决方案,而不是“别名”,因为存在一些错误。
server
{
listen [::]:80;
server_name example.com;
root /var/www/html;
index index.php index.html;
#try_files $uri $uri/ =404;
location /forum/
{
root /path/to/htdocs/phpbb;
rewrite ^/forum/(.*)$ /$1 break;
location ~ .+\.php$
{
rewrite ^/forum/(.*)$ /$1 break;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
}
示例配置正常 - example.com/forum/viewtopic.php 执行脚本 /path/to/htdocs/phpbb/viewtopic.php - 但< strong> example.com / ( index.php )不起作用:
“/ var / www / html / index.php”失败(2:没有这样的文件或目录)
从服务器块中删除“index”行后:
“/ path / to / htdocs / phpbb /”的目录索引被禁止
将“index”和/或“try_files”行移至位置区后:
index.php没有传递给php-fpm ...
好的,我的配置有什么问题?任何提示?
答案 0 :(得分:0)
好的,别名是错误的(重写也是如此......),但是如果你避免使用 try_files 并使用if(即使是邪恶的......)它应该有效!
server
{
listen [::]:80;
server_name example.com;
root /var/www/html;
location /forum/
{
alias /path/to/htdocs/phpbb/;
index index.php index.html;
location ~ "^(/forum/)(.+\.php)(/.+){0,1}$"
{
if (!-f $document_root$2)
{
return 404;
}
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $document_root$2;
fastcgi_param SCRIPT_NAME $1$2;
fastcgi_param PATH_INFO $3;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}
}
phpinfo()看起来不错,但还有一个问题:安全吗?