原案例分析

1、原来的网站在wamp环境下搭建完成,一切正常,上传到虚拟主机环境为lnmp,结果访问时可以打开主页,然后点其他页面全部报404错误;

2、经分析得出原因:原网站环境为wamp使用了伪静态,伪静态规则写在网站根目录的.htaccess文件中,Apache下默认识别此文件内容,而Nginx服务器不识别.htaccess文件,导致伪静态规则无效,自然无法解析url地址,导致404错误(文件不存在)

3、解决办法:因为Nginx服务器不识别.htaccess文件的,所以原来写在此文件中的伪静态规则需要转移出来,转移方式有两种:

方法一、如果想保留.htaccess文件,则在linux服务器此目录 
/usr/local/nginx/conf/rewrite/
下建立一个伪静态规则配置文件名字任取,例如:/usr/local/nginx/conf/rewrite/my.conf,将原来在.htaccess文件中的rewrite规则转换成nginx下的rewrite规则,提供一个自动转换网址

http://www.anilcetin.com/convert-apache-htaccess-to-nginx/ 
  实测真实有用

CentOS 6.2实战部署Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用Nginx搭建WEB服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3下Nginx性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3下配置Nginx加载ngx_pagespeed模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4安装配置Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx搭建视频点播服务器(仿真专业流媒体软件) http://www.linuxidc.com/Linux/2012-08/69151.htm

 

本案例原规则

 



 RewriteEngine on

 RewriteCond %{REQUEST_FILENAME} !-d

 RewriteCond %{REQUEST_FILENAME} !-f

 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

 

 

转换成Nginx后

 

if (!-d $request_filename){

 set $rule_0 1$rule_0;

 }

 if (!-f $request_filename){

 set $rule_0 2$rule_0;

 }

 if ($rule_0 = "21"){

 rewrite ^/(.*)$ /index.php/$1 last;

 }

然后将转换好的规则替换.htaccess文件内容,将.htaccess文件导入my.conf,my.conf内容如下:

 

location / {

     
   

     
     
    include 
/home/wwwroot/dijin.com/web/.htaccess;

     
     
   

 }

--至此完成伪静态转移

方法二、如果不想保留.htaccess文件,则前面的步骤照常,最后一步替换的时候直接将转换好的内容放入my.conf文件中,如下:

location / {

     
   

     
     
    if (!-d
$request_filename){

     
      set
$rule_0 1$rule_0;

     
     
    }

     
     
    if (!-f
$request_filename){

     
      set
$rule_0 2$rule_0;

     
     
    }

     
     
    if ($rule_0 = "21"){

     
    rewrite ^/(.*)$ /index.php/$1
last;

     
     
    }

     
     
   

  }

--至此完成

Nginx
的详细介绍
请点这里

Nginx
的下载地址
请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-06/103103.htm

PHP网站从Apache转移到Nginx后产生404错误的原因和解决办法的更多相关文章

  1. nginx “403 Forbidden” 错误的原因及解决办法

    nginx 的 403 Forbidden errors 表示你在请求一个资源文件但是nginx不允许你查看. 403 Forbidden 只是一个HTTP状态码,像404,200一样不是技术上的错误 ...

  2. Nginx 502 Bad Gateway 错误的原因及解决方法

    http://my.oschina.net/zhouyuan/blog/118708 刚才在调试程序的时候,居然服务器502错误,昨天晚上也发生了,好像我没有做非常规的操作. 然后网上寻找了下答案, ...

  3. win10更新后任务栏卡死 的原因和解决办法

    @ 目录 现象: 原因: 第一步:断网并关闭资讯和兴趣 第二步:卸载更新 第三步:关闭win10自动更新 第四步:永久关闭资讯和兴趣 现象: win10 更新后,开机任务栏卡死,点开始反应,设置页面无 ...

  4. U盘安装Ubuntu 12.04成功后系统无法启动的原因及解决办法

    想搭建一个Linux开发环境,选择了ubuntu12.04长期支持版,采用u盘安装(Universal-USB-Installer做的启动),发现安装完成之后,拔掉u盘无法启动,插上u盘之后,可以重启 ...

  5. thphp(tp5)项目网站从Apache换成nginx报500

    thphp(tp5)项目网站从Apache换成nginx报500 百度了一下,查看资料是Nginx配置fastcgi.conf的问题,打开文件编辑既可,如下图:

  6. 解决wordpress修改固定链接后出现404错误不能访问文章的方法

    首先,建议大家安装完wordpress网站程序之后第一时间设置一下固定链接,避免以后修改出错.在wp后台仪表盘左侧导航里找到“设置——固定链接”即可配置你的wordpress固定链接,通常我习惯使用的 ...

  7. Nginx+CI出现404错误

    最近刚学ci框架,做了个简单的项目,在本地搭服务器的环境都调通了,但是部署到远程服务器时: http://example.com/(index.php)/ 可以访问(为配置的默认controller- ...

  8. SharePoint 2013 附加内容数据库后出现404错误

    本文讲述怎样解决SharePoint 2013 加内容数据库(Content DataBase)后出现404错误. 笔者依照http://technet.microsoft.com/en-us/lib ...

  9. 关于hasNextInt判断后无限循环输出else项的解决办法

    话不多说,上来就是干! import java.util.Scanner; public class Test_hasNextInt { /** * @param args */ public sta ...

随机推荐

  1. js随机数生成,生成m-n的随机数

    使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备,Math.random()函数返回0和1之间的伪随机数 var random = Math.random(); console. ...

  2. 【liferay】3、liferay 添加spring支持

    1.添加对应的spring的jar 地址:https://spring.io/projects 选中springframework 进入git源码的地方,看简介 我们需要编译好的jar 当然也可以自己 ...

  3. 【原创】java NIO FileChannel 学习笔记 FileChannel 简介

    java NIO 中FileChannel 的实现类是  FileChannelImpl,FileChannel本身是一个抽象类. 先介绍FileChannel File Channels 是线程安全 ...

  4. 【读书笔记】A Swift Tour

    素材:A Swift Tour 推荐下载Playground:Download Playground objc 自己较为熟悉,想熟悉下风头正劲的 swift.就先从官方的入门手册开始撸. 每一小节,我 ...

  5. 房上的猫:了解java与学习java前的准备

    一.java 概述:  1.通常指完成某些事情的一种既定方式和过程  2.程序可以看做对一系列动作执行过程的描述  3.计算机按照某种顺序完成一系列指令的集合称为程序  4.计算机仅识别二进制低级语言 ...

  6. Linux重启后raid5的名字发生变化

    Linux重启后raid5的名字发生变化 使用raid,每次重启后,都会变换设备路径 比如原来为/dev/md0 重启一次变成了/dev/md127 这个问题,可以使用修改配置文件来解决. 1.mda ...

  7. Android OpenGL ES 入门系列(二) --- 环境搭建

    转载请注明出处 本文出自Hansion的博客 本章介绍如何使用GLSurfaceView和GLSurfaceView.Renderer完成在Activity中的最简单实现. 1.在AndroidMan ...

  8. Linux入门篇(四)——Vim的使用与Bash

    这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...

  9. Linux学习笔记整理

    2.1BASH命令行基本操作 [用户@主机~]$ # //$#为提示符 $代表普通用户 #代表root用户 ~代表当前目录 ls   //list相当于DOS的dir 显示当前目录列表 -a   // ...

  10. Nginx 解决WebApi跨域二次请求以及Vue单页面问题

    一.前言 由于项目是前后端分离,API接口与Web前端 部署在不同站点当中,因此在前文当中WebApi Ajax 跨域请求解决方法(CORS实现)使用跨域处理方式处理而不用Jsonp的方式. 但是在一 ...