CakePHP 2在nginx - 301重定向的子目录中

时间:2013-06-14 22:29:20

标签: cakephp nginx configuration-files http-status-code-301

我很难让nginx在子目录中使用CakePHP。

我正在使用nginx因为我只熟悉Apache而且我想学习一些新东西。我的目标是将CakePHP托管在一个子目录中。

我的/ etc / nginx / sites-available / default文件如下所示:

server {

listen 0.0.0.0:80;
root /var/www/;
index index.html index.php;

include /etc/nginx/include/php;
error_page 404 = /404.html;

location / {
    root index.html;
    index index.php index.html index.htm;
    autoindex on;
    try_files $uri $uri/ /index.php;
}

location /randodb {
    if (!-e $request_filename) {
        rewrite ^/randodb(.+)$ /randodb/app/webroot/$1 last;
        break;
    }
}

location /randodb/app/webroot {
    if (!-e $request_filename) {
        rewrite ^/randodb/app/webroot/(.+)$ /randodb/app/webroot/index.php?url=$1 last;
        break;
    }
  }
}

server {

listen 0.0.0.0:443;
root /var/www/;
index index.html index.php;

fastcgi_param HTTPS on;
include /etc/nginx/include/ssl;
include /etc/nginx/include/php;

error_page 404 = /404.html;


}

无论我做什么,/ randodb文件夹中的任何请求都会获得301重定向。

它总是将我重定向到http://nginx-php-fastcgi/randodb/

如果您希望在行动中看到此行为:http://www.matgilbert.com/randodb

1 个答案:

答案 0 :(得分:0)

首先,这是您需要的唯一区块

location ~ /randodb(.*) {
    root /var/www/randodb/app/webroot;
    try_files $1 $1/ /index.php?url=$1;
}
/块的上面

,你指定了root index.html;这应该做什么,因为我认为这是不正确的,root应该是一个目录。

关于此块

fastcgi_param HTTPS on;
include /etc/nginx/include/ssl;
include /etc/nginx/include/php;

是php工作吗?从来没有见过,你使用的是不同于fast-cgi或fpm的东西吗?

然后是ssl块,这是我服务器上的ssl块

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/name.crt;
    ssl_certificate_key /etc/ssl/name.key;
    server_name example.com
    location / {
        # the rest of my config
    }
}