2015-06-03 93 views
0

我有cakephp設置與nginx,並且在我有nginx設置和url重寫工作完美之前,使得形式的url:mywebsite.com/cake_project/controller/action完美工作。然後,我改變了文件夾cake_project的名稱web,並更新了nginx的配置文件,現在當我去mywebsite.com/web CakePHP的作品,但如果我去mywebsite.com/web/controllermywebsite.com/web/controller/action它給404nginx cakephp重寫規則突然導致404,它之前工作

(我的操作系統是Ubuntu和我的CakePHP的版本是2.3.9)

這是我目前Nginx的配置是什麼,對不起,我沒有備份我的老nginx的配置:((這可能會幫助我)。

## 
# You should look at the following URL's in order to grasp a solid understanding 
# of Nginx configuration files in order to fully unleash the power of Nginx. 
# http://wiki.nginx.org/Pitfalls 
# http://wiki.nginx.org/QuickStart 
# http://wiki.nginx.org/Configuration 
# 
# Generally, you will want to move this file somewhere, and start with a clean 
# file but keep this around for reference. Or just disable in sites-enabled. 
# 
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. 
## 

server { 
    listen 80; 
    listen [::]:80; 

    server_name mywebsite.com; 

    return 301 https://$server_name$request_uri; 
} 

server { 
     listen 443 default_server; 
     listen [::]:443 default_server ipv6only=on; 

     root /usr/share/nginx/html; 
     index index.php index.html index.htm; 

     ssl on; 
     ssl_certificate path_to_ssl_certificate; 
     ssl_certificate_key path_to_ssl_key; 

     ssl_session_timeout 5m; 

     ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; 
     ssl_prefer_server_ciphers on; 

     # Make site accessible from http://localhost/ 
     server_name localhost; 

     add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; 

     location /web { 
      alias /usr/share/nginx/html/web/app/webroot; 
      try_files $uri $uri/ /web/webroot/index.php; 
     } 

     location/{ 
       # First attempt to serve request as file, then 
       # as directory, then fall back to displaying a 404. 
       try_files $uri $uri/ =404; 
       # Uncomment to enable naxsi on this location 
       # include /etc/nginx/naxsi.rules 
     } 

     error_page 404 /404.html; 
     error_page 500 502 503 504 /50x.html; 
     location = /50x.html { 
       root /usr/share/nginx/html; 
     } 

     location ~ \.php$ { 
       try_files $uri =404; 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
       fastcgi_pass unix:/var/run/php5-fpm.sock; 
       fastcgi_index index.php; 
       include fastcgi_params; 
     } 

     # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests 
     #location /RequestDenied { 
     #  proxy_pass http://127.0.0.1:8080; 
     #} 

     #error_page 404 /404.html; 

     # redirect server error pages to the static page /50x.html 
     # 
     #error_page 500 502 503 504 /50x.html; 
     #location = /50x.html { 
     #  root /usr/share/nginx/html; 
     #} 

     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
     # 
     location ~ \.php$ { 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     #  # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 
     # 
     #  # With php5-cgi alone: 
     #  fastcgi_pass 127.0.0.1:9000; 
     #  # With php5-fpm: 
       fastcgi_pass unix:/var/run/php5-fpm.sock; 
       fastcgi_index index.php; 
       include fastcgi_params; 
     } 

     # deny access to .htaccess files, if Apache's document root 
     # concurs with nginx's one 
     # 
     #location ~ /\.ht { 
     #  deny all; 
     #} 
} 


# another virtual host using mix of IP-, name-, and port-based configuration 
# 
#server { 
#  listen 8000; 
#  listen somename:8080; 
#  server_name somename alias another.alias; 
#  root html; 
#  index index.html index.htm; 
# 
#  location/{ 
#    try_files $uri $uri/ =404; 
#  } 
#} 

任何人都可以看到,我做錯了什麼?

回答

0

對於Nginx 1.4-1.8中的所有內容,我都有類似的Nginx配置,對於CakePHP整體而言尤其如此,特別是對於重寫。你有沒有使用IPv6的東西?如果您確定沒有使用IPv6,我會認爲這些東西可以繼續使用。

這裏是一個工作的例子,我有幾個CakePHP的2.x的項目工作:

server { 
    listen 80 default_server; 
    server_name www.example.com; 
    rewrite ^(.*) https://www.example.com$1 permanent; 
} 
server { 
    listen 443 ssl; 

    access_log /var/log/nginx/www.example.com.access.log; 
    error_log /var/log/nginx/www.example.com.error.log; 

    root /var/www/production/app/webroot; 
    index index.php; 

    server_name www.example.com; 

    ssl_certificate /etc/nginx/ssl.crt/www.example.com.intermediate.combined.crt; 
    ssl_certificate_key /etc/nginx/ssl.key/www.example.com.key; 

    # For Larger File Uploads 
    client_max_body_size 28M; 

    # This is for CakePHP 
    if (!-e $request_filename) { 
     rewrite ^/(.+)$ /index.php?url=$1 last; 
     break; 
    } 

    proxy_buffers 4 256k; 
    proxy_buffer_size 128k; 
    proxy_busy_buffers_size 256k; 

    # Cache Headers for Static Files 
    location ~* \.(?:ico|css|js|gif|jpe?g|png|swf)$ { 
     expires 30d; 
     add_header Pragma public; 
     add_header Cache-Control "public"; 
    } 

    # Pass the PHP scripts to FastCGI server 
    # listening on 127.0.0.1:9000 
    location ~ \.php$ { 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_pass_header Set-Cookie; 
     fastcgi_ignore_headers Cache-Control Expires; 
     fastcgi_intercept_errors on; # to support 404s for PHP files no$ 
     fastcgi_connect_timeout 300; 
     fastcgi_send_timeout 300; 
     fastcgi_read_timeout 300; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_buffers 4 256k; 
     fastcgi_buffer_size 128k; 
     fastcgi_busy_buffers_size 256k; 
     include fastcgi_params; 
     proxy_connect_timeout 300; 
     proxy_send_timeout 300; 
     proxy_read_timeout 300; 
     send_timeout 300; 
    } 

    # Deny access to .htaccess files, 
    # git & svn repositories, etc 
    location ~ /\.(ht|git|svn) { 
     deny all; 
    } 
} 

這裏是另一種選擇,可能爲你工作:

server { 
    listen 80; 
    listen [::]:80; 
    server_name mywebsite.com; 
    return 301 https://$server_name$request_uri; 
} 

server { 
    listen 443 default_server; 
    listen [::]:443 default_server ipv6only=on; 

    root /usr/share/nginx/html; 
    index index.php index.html index.htm; 

    ssl on; 
    ssl_certificate path_to_ssl_certificate; 
    ssl_certificate_key path_to_ssl_key; 

    ssl_session_timeout 5m; 

    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; 
    ssl_prefer_server_ciphers on; 

    # Make site accessible from http://localhost/ 
    server_name localhost; 

    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; 

    location /web { 
     rewrite ^/web$ /web/ permanent; 
     rewrite ^/web/(.+)$ /$1 break; 
     root /usr/share/nginx/html/web/app/webroot; 
     try_files $uri /$uri/ @cakephp; 
    } 

    error_page 404 /404.html; 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 

    # Other PHP Files - Non-CakePHP 
    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     include fastcgi_params; 
    } 

    # For CakePHP 
    location @cakephp { 
     set $q $request_uri; 
     if ($request_uri ~ "^/web(.+)$") { 
      set $q $1; 
     } 
     fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/web/app/webroot/index.php; 
     fastcgi_param QUERY_STRING url=$q; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_intercept_errors on; # to support 404s for PHP files no$ 
     include fastcgi_params; 
    } 

}