编辑一个:我也在Windows 7上使用apache对此进行了测试,并且发生了完全相同的事情。这意味着问题主要是将所有页面路由到主页。
编辑二:根据#yii IRC频道中的建议,我用一个工作项目中非常简单的文件替换了.htaccess文件的内容。然而,这并没有在问题上产生任何变化。
编辑三:我现在已经正常工作,我的代码有了一些变化。答案如下
我一直在尝试导入一个用我导入工作站的Yii Framework编写的网站。我遇到了一个问题,尝试加载任何页面只会直接到主页面。这意味着所有请求实质上都被路由,就像我加载了根请求一样。访问日志或错误日志中不会弹出任何错误;请求在nginx的访问日志中如下所示,其中'example'是'localhost','127.0.0.1'或服务器的IP地址:
Accessing root ( http://example/ ):
127.0.0.1 - - [08/May/2013:13:05:28 -0700]
"GET / HTTP/1.1" 200 8436 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0"
Accessing login ( http://example/site/login ):
127.0.0.1 - - [08/May/2013:13:07:01 -0700]
"GET /site/login HTTP/1.1" 200 8427 "http://example/" "Mozilla/5.0 (X11; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0"
Accessing the same controller by http://example/index.php?r=site/login:
127.0.0.1 - - [08/May/2013:14:40:45 -0700]
"GET /index.php?r=site/login HTTP/1.1" 200 8419 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0"
考虑到我已经设置了其他2个可以正常运行的Yii项目,它们使用的服务器配置类似于我将在下面粘贴,我认为它可能是应用程序本身的工作原理我还不热衷于此。如果有人对我可以分享的任何其他建议有任何建议,请尝试,或者在我从其他网站导入的工作项目中进行比较,我们将不胜感激:)
编辑:切换配置更接近我实际使用的内容。考虑到项目在Windows上运行Apache时遇到同样的问题,这可能无关紧要。
server {
server_name localhost;
listen 80;
keepalive_timeout 70;
root /usr/www/[project name omitted]/public_html;
client_max_body_size 4M;
client_body_buffer_size 4M;
client_header_buffer_size 4M;
location / {
try_files $uri $uri/ /index.php?$args;
autoindex on;
}
location ^~ /data/ {
expires 30d;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#Disable logging for favicon
location = /favicon.ico {
log_not_found off;
access_log off;
}
#Disable logging for robots.txt
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ /themes/\w+/views {
deny all;
access_log off;
log_not_found off;
}
# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
try_files $uri =404;
#fastcgi_intercept_errors on;
#fastcgi_connect_timeout 20;
fastcgi_send_timeout 20;
fastcgi_read_timeout 600; # For xdebug to work alright
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
答案 0 :(得分:0)
您应该从location /
配置中删除此行:
index index.html $yii_bootstrap;
基本上你告诉Nginx应该总是使用$yii_bootstrap
作为索引文件。因此永远不会使用行try_files
。
答案 1 :(得分:0)
我可以看到两件事。通常对于Yii应用程序,我的位置块设置如下。不是index.php文件之前的“〜”和正斜杠。我还将该位置块的索引选项移动到之外,并移动到服务器根块中。因此,您的位置块应如下所示
location ~ / {
try_files $uri $uri/ /index.php?$args;
}
第二件事与你的php位置块有关。除非你运行多个php文件,否则你只需要指定对index.php的访问权限,而不是允许访问任何面向php文件的 web。
location ~ index.php$ {
此位置块应该适用于您:
location ~ index.php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /path/to/yii/app$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors off;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
答案 2 :(得分:0)
在与该项目的原始开发人员联系后,我已经解决了所有问题,他告诉我需要进行一些更改。它们如下:
更新如下代码的实例:
session_start();
$_SESSION['allowdownload'] = true;
session_write_close();
用这个:
$session=new CHttpSession;
$session->open();
$session['allowdownload'] = true;
$session->close();
除了将urlManager数组中'showScriptName'的protected / config / main.php中的设置更改为'true'而不是'false'。我希望这在某些方面可以帮助其他人!