如何在 Ubuntu、nGinx 和 codeigniter 中启用 URL 重写?
How to enable URL rewrite in Ubuntu, nGinx and codeigniter?
我已经在服务器上设置了 ubuntu、php5.6、nGinx,并且在我配置的网站下部署了几个项目。我需要部署在一个目录下的一个项目是在codeigniter中开发的,我已经配置了nGinx配置如下:
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires max;
log_not_found off;
}
location / {
# Check if a file or directory index file exists, else route it to index.php.
try_files $uri $uri/ /index.php;
}
location ~* \.php$ {
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
URL 现在不说 404,但在 URL 重写后显示我网站的主页。我该如何解决这个问题?
如果我没有正确理解你的问题。
一种方法是 运行 PHP 全局访问您的 Web 目录的根目录。一旦你拥有它 运行ning 你就可以指定每个位置将接受的文件。因此,如果您需要将 PHP 隔离到子目录,那么您可以更改该目录允许的文件。
index index.html index.htm
带有子目录的示例 Nginx 配置:
server {
listen 80;
server_name mysite.com www.mysite.com;
root /path/to/your/website.com/;
index index.html index.htm
error_log log/error.log;
# set expiration of assets to MAX for caching
location ~* .(ico|css|js|gif|jpe?g|png)(?[0-9]+)?$ {
expires max;
log_not_found off;
}
# main codeigniter rewrite rule or sub-directory
location /codeigniter {
alias /path/to/your/website.com/codeigniter/;
try_files $uri $uri/ /index.php;
}
# php parsing
location ~ .php$ {
root /path/to/your/website.com/;
try_files $uri =404;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
我不是 Codeigniter 用户,因此无法共享 PHP 的配置。但是需要为子目录指定位置。此堆栈 post 将向您展示如何执行此操作 here。
另一种方法是将 PHP 隔离到子目录。和上面类似,只改这一行
# php parsing
location ~ /codeigniter/.+\.php$
这个 post 有一个完整的例子 approach。
实际上,我已经解决了这个问题。问题是更改 fastcgi_param 并且它工作正常。谢谢@edlee
location /6 {
alias /var/www/html/6/;
try_files $uri $uri/ /6/index.php;
}
location ~* \.php$ {
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
root /var/www/html/;
try_files $uri =404;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
我已经在服务器上设置了 ubuntu、php5.6、nGinx,并且在我配置的网站下部署了几个项目。我需要部署在一个目录下的一个项目是在codeigniter中开发的,我已经配置了nGinx配置如下:
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires max;
log_not_found off;
}
location / {
# Check if a file or directory index file exists, else route it to index.php.
try_files $uri $uri/ /index.php;
}
location ~* \.php$ {
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
include fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
URL 现在不说 404,但在 URL 重写后显示我网站的主页。我该如何解决这个问题?
如果我没有正确理解你的问题。
一种方法是 运行 PHP 全局访问您的 Web 目录的根目录。一旦你拥有它 运行ning 你就可以指定每个位置将接受的文件。因此,如果您需要将 PHP 隔离到子目录,那么您可以更改该目录允许的文件。
index index.html index.htm
带有子目录的示例 Nginx 配置:
server {
listen 80;
server_name mysite.com www.mysite.com;
root /path/to/your/website.com/;
index index.html index.htm
error_log log/error.log;
# set expiration of assets to MAX for caching
location ~* .(ico|css|js|gif|jpe?g|png)(?[0-9]+)?$ {
expires max;
log_not_found off;
}
# main codeigniter rewrite rule or sub-directory
location /codeigniter {
alias /path/to/your/website.com/codeigniter/;
try_files $uri $uri/ /index.php;
}
# php parsing
location ~ .php$ {
root /path/to/your/website.com/;
try_files $uri =404;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
我不是 Codeigniter 用户,因此无法共享 PHP 的配置。但是需要为子目录指定位置。此堆栈 post 将向您展示如何执行此操作 here。
另一种方法是将 PHP 隔离到子目录。和上面类似,只改这一行
# php parsing
location ~ /codeigniter/.+\.php$
这个 post 有一个完整的例子 approach。
实际上,我已经解决了这个问题。问题是更改 fastcgi_param 并且它工作正常。谢谢@edlee
location /6 {
alias /var/www/html/6/;
try_files $uri $uri/ /6/index.php;
}
location ~* \.php$ {
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
root /var/www/html/;
try_files $uri =404;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}