第七星尘

ShowDoc在nginx下的重定向规则

—-2016.5.18更新说明:新版ShowDoc已无须写重定向规则(当然写了也可以兼容)——


某些版本的nginx不支持PATHINFO,导致访问showdoc的时候可能出现404错误。本文将对此提供一个解决方案。

首先请你确保安装了nginx+php环境,完整教程可参考某网友写的:http://blog.csdn.net/tde007/article/details/50212001

在nginx.conf文件添加以下内容:

 location / {
    if (!-e $request_filename) {
        rewrite ^/index.php/(.*)$ /index.php?s=$1 last;
        rewrite ^/(.*)$ /index.php?s=$1 last;
        break;
    }
}

以上规则是对于安装在网站根目录的情况。如果是安装在二级目录,如”wu.com/showdoc”,则:

location /showdoc/ {
    if (!-e $request_filename) {
        rewrite ^/showdoc/index.php(.*)$ /showdoc/index.php?s=$1 last;
        rewrite ^/showdoc/(.*)$ /showdoc/index.php?s=$1 last;
        break;
    }
}
分享到: 更多
码字很辛苦,转载请注明来自第七星尘的技术博客《ShowDoc在nginx下的重定向规则》

评论

  1. 刘富泉 #1

    if (!-e 无法识别啊 ,更改错误

    回复
    2017-08-29
  2. 池中鱼 #2

    我把showdoc部署在了ubuntu 14.04上 部署完之后改完权限浏览器可以访问showdoc主页 但是在注册的时候会报错
    could not find driver
    错误位置

    FILE: /var/www/html/showdoc-master/ThinkPHP/Library/Think/Db/Driver.class.php  LINE: 109
    这个是什么问题呀?

    回复
    2016-05-20
    • 第七星尘

      你是使用Mysql?如果是则安装php-pdo;如果是sqlite,试试在phpinfo里检测是否加载了php-sqlite。类似的问题可以先网上搜索下http://www.111cn.net/database/mysql/46123.htm

      回复
      2016-05-20
      • 池中鱼

        嗯 我看着收拾了一下 现在注册登录都没问题了 但是发现一个新问题就是创建完项目之后点开项目的时候提示模版不存在
        模板不存在:./Application/Home/View/Item/Show.html
        错误位置

        FILE: /var/www/html/showdoc-master/ThinkPHP/Library/Think/View.class.php  LINE: 110
        这个是什么原因呀,网上的资料不知道该从哪方面下手查

        回复
        2016-05-20
        • 第七星尘

          如果你开启了index.php的debug,请关闭之

          回复
          2016-05-20
          • 池中鱼

            嗯 关掉之后的确可以了 非常感谢大神的耐心指导 非常感谢

            2016-05-23
  3. 你猜猜看 #3

    毕竟还是按照apache来定制的, nginx下面的问题太多了,虽说开源吧,.,,可是联系方式的回复太慢. 也就折腾到这里就止步了

    回复
    2016-05-9
    • 第七星尘

      2016.5.18更新说明:新版ShowDoc已无须写重定向规则(当然写了也可以兼容)

      回复
      2016-05-18
  4. 口吞山河 #4

    感谢提供这么好的系统。不过有个问题,导出的word好丑,表格也没边框,现在有计划在改善这个功能么?

    回复
    2016-04-13
    • 第七星尘

      word不太好处理,所以暂时无花精力去优化的计划

      回复
      2016-04-14
  5. leo #5

    博主,我在你的在线文档里面注册了账号,结果密码忘记了,怎么找回密码啊。。。我的api文档都不能修改了。。。

    回复
    2016-04-12
  6. 唐韬 #6

    http://api2.crap.cn http://api.crap.cn java版开源API接口管理系统

    回复
    2016-04-5
    • 第七星尘

      如果单纯只是用作接口的话,其实RAP是个更好的选择

      回复
      2016-04-6
  7. skiy #7

    http://docs.ocms.cc/index.php/home/item/show?item_id=2 => Access denied.
    http://docs.ocms.cc/home/item/show?item_id=2 => 正常。按照文章内的rewrite写的。问题很多啊

    回复
    2016-03-29
    • skiy

      同作者文章:只需要改两个地方:

      1.修改index.php入口文章,添加:
      define(‘__APP__’, ”);

      2.修改vhost的conf
      location / {

      if (!-e $request_filename) {
      rewrite ^/(.*)$ /index.php?s=$1 last;
      break;
      }
      }

      回复
      2016-03-29
  8. 十七 #8

    大神,我现在登录首页可以了,demo和教程也可以了,就是注册时返回验证码不正确,然后点击返回首页时报错,
    无法加载模块:Index
    错误位置

    FILE: /mnt/www/showdoc/ThinkPHP/Library/Think/Dispatcher.class.php  LINE: 178

    回复
    2016-03-25
    • 十七

      [ 2016-03-25T14:25:01+08:00 ] 192.168.100.95 /showdoc/index.php/
      INFO: [ app_init ] –START–
      INFO: Run BehaviorBuildLiteBehavior [ RunTime:0.000025s ]
      INFO: [ app_init ] –END– [ RunTime:0.000177s ]
      ERR: 无法加载模块:Index

      回复
      2016-03-25
  9. 何仙姑夫 #9

    哥们儿,写的接口文档在你的网站丢失了啊

    回复
    2016-03-22
    • 第七星尘

      一直访问正常,没发现什么异常。你发下你账号到我邮箱

      回复
      2016-03-24
      • 何仙姑夫

        知道问题在哪了。在百度上搜showdoc搜到的不是你的服务。是一个公司的。他们把服务停止了。现在开始在你的服务上写文档就没事了。。。谢谢哥们

        回复
        2016-03-24
        • 第七星尘

          对此我也无力,百度居然不让原创的放在前头

          回复
          2016-03-24
  10. fisher #10

    很急啊,登录的时候验证码显示不出来~~~我是用的nginx

    回复
    2016-03-21
    • 第七星尘

      验证码不出来请搜索安装php-gd模块

      回复
      2016-03-21
      • fisher

        我重新编译了一下,现在能显示了,但是提交注册的时候为什么一直提示验证码错误

        回复
        2016-03-22
        • 第七星尘

          大概php的session目录没权限吧

          回复
          2016-03-22
          • fisherhe

            拿我全部都附一下777权限吧

            2016-03-22
          • fishehe

            session.save_path = “/tmp” tmp有权限,还是提示验证码错误

            2016-03-22
          • 第七星尘

            试着打印session的值出来看看是否相等;如果你不是php程序员,大概我也不知道如何帮你调试了

            2016-03-22
    • KAAQF

      你重写的代码发来我看看

      回复
      2016-03-21
  11. 十七 #11

    使用nginx,那么就不需要mysql了么

    回复
    2016-03-21
    • 第七星尘

      需要

      回复
      2016-03-21
      • KAAQF

        127.0.0.1 /api/list/22?cat=0&filter=3a8_9a12_13a17
        ERR: 无法加载模块:List

        回复
        2016-03-21
      • KAAQF

        原来不支持7.0

        回复
        2016-03-21
      • 十七

        删除Application/Runtime/目录下所有文件(缓存来的),以后,重新启动php和nginx,但是什么都没有了,求大神回复

        回复
        2016-03-24
        • 第七星尘

          给予权限了吗;重定向规则写好了没;

          回复
          2016-03-24
          • 十七

            在我没有删除缓存之前可以正常登陆,就是注册时报错,但是删除缓存以后,不能登录首页了,望大神指点

            2016-03-24
          • 十七

            现在可以登录了,但是不能进行点击操作,会报错,系统错误“ThinkPHP3.2.3 { Fast & Simple OOP PHP Framework } — [ WE CAN DO IT JUST THINK ]”

            2016-03-25
  12. KAAQF #12

    [ 2016-03-21T16:47:43+08:00 ] 127.0.0.1 /api/list/22?cat=0&filter=3a8_9a12_13a17
    ERR: 无法加载模块:List

    回复
    2016-03-21
    • 第七星尘

      /api/list ?showdoc没有这个模块和控制器。不知道你哪里访问的

      回复
      2016-03-21
      • KAAQF

        404 Not Found

        nginx

        回复
        2016-03-21
      • KAAQF

        首页可以打开

        回复
        2016-03-21
        • 第七星尘

          写好重定向规则后重启nginx让它生效

          回复
          2016-03-21
          • KAAQF

            location /api/ {
            if (!-e $request_filename) {
            rewrite ^/api/index.php(.*)$ /api/index.php?s=$1 last;
            rewrite ^/api/(.*)$ /api/index.php?s=$1 last;
            break;
            }
            }

            2016-03-21
      • KAAQF

        rewrite ^/api/index.php(.*)$ /api/index.php?s=$1 last;
        rewrite ^/api/(.*)$ /api/index.php?s=$1 last;

        回复
        2016-03-21
        • 第七星尘

          请把上面的重定向原样复制过去

          回复
          2016-03-21
          • KAAQF

            我上传的是根目录下.的api下面,目录也改成api了?

            2016-03-21
        • 第七星尘

          安装在网址跟目录的是第一个规则,安装在网址的二级目录如wu.com/showdoc的是第二个规则。

          回复
          2016-03-21
          • KAAQF

            必须要showdoc吗?

            2016-03-21
          • 第七星尘

            不是必须;看你的重定向规则是没错了的。不知你环境是否还有其他干扰

            2016-03-21
          • KAAQF

            定向应该是可以,因为首页可以访问到!就是点登录后就出来404,这个和数据库有关系吗

            2016-03-21
          • 第七星尘

            访问首页不需要重定向,所以能访问;而其他页面需要。出现404应该就是重定向不知道重哪里去了。你尝试清除缓存看看吧

            2016-03-21
          • KAAQF

            我在试试看,一会在留言

            2016-03-21
  13. 一条虫的量词 #13

    server {
    listen 8021;
    server_name showdoc;
    location / {
    root E:/testweb/showdoc;
    index index.html index.htm index.php;
    if (!-e $request_filename) {
    rewrite ^/(.*)$ /index.php?$1 last;
    break;
    }
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root html;
    }
    location ~ .php/?.*$ {
    root E:/testweb/showdoc;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    #加载Nginx默认”服务器环境变量”配置
    include fastcgi.conf;

    #设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
    set $fastcgi_script_name2 $fastcgi_script_name;
    if ($fastcgi_script_name ~ “^(.+.php)(/.+)$”) {
    set $fastcgi_script_name2 $1;
    set $path_info $2;
    }
    fastcgi_param PATH_INFO $path_info;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
    }
    }

    我的完整教程,完美

    回复
    2016-03-15
  14. 张小强 #14

    哦,我知道了,在新建目录里边可以删除以前建过的目录。

    回复
    2016-03-14
  15. 张小强 #15

    大神,我又来了,项目下的目录,貌似没有删除选项,一旦需要想调整目录,整个项目得重新推倒重来,这个是不是改一下?

    回复
    2016-03-14
  16. 张小强 #16

    博主,应该增加个下载真个项目为html的功能,页面好看,导出来的word难看。。
    嘿嘿。

    回复
    2016-03-8
    • 第七星尘

      它本身就是网页,何必要导出为网页。直接发个在线地址给别人看不就得了

      回复
      2016-03-9
      • 十七

        在导入mysql时,是新建一个名为showdoc的数据库吧

        回复
        2016-03-25
        • 第七星尘

          数据库名为何不重要,在配置里改即可

          回复
          2016-03-25
          • 十七

            大神,点击注册时 “Undefined class constant ‘MYSQL_ATTR_INIT_COMMAND’
            错误位置

            FILE: /mnt/www/showdoc/ThinkPHP/Library/Think/Db/Driver/Mysql.class.php  LINE: 36

            2016-03-25
          • 十七

            大神,验证码返回不正确怎么破?在注册时一直提示验证码不正确,点击返回首页是还出现无法加载的情况

            2016-03-25
          • 十七

            感谢大神,现在可以了,刚才是session没有权限,谢谢大神

            2016-03-25
    • 十七

      PHP Fatal error: Undefined class constant ‘MYSQL_ATTR_INIT_COMMAND’ in /mnt/www/showdoc-master/ThinkPHP/Library/Think/Db/Driver/Mysql.class.php on line 36

      回复
      2016-03-25
  17. 张小强 #17

    终于搞定了。。。
    总结一下,首先,因为 nginx.conf修改的时候多个大括号,后来重启nginx,才发现配置文件错误,然后修正。
    然后,注册页面 没有提示信息,白框,360浏览器。后来换了谷歌浏览器解决。
    第三个问题是我本地root访问mysql总是报没有权限,远程可以访问,localhost不行,最后至少配成了具体的ip,也解决了。
    辛苦博主耐心指导,辛苦辛苦。。[害羞]

    回复
    2016-03-8
  18. helloworld #18

    清了下缓存可以了,谢谢了。。[挖鼻屎][兔子]

    回复
    2016-03-8
  19. 张小强 #19

    demo 和教程 连接是 系统错误。
    :(

    页面错误!请稍后再试~
    ThinkPHP3.2.3 { Fast & Simple OOP PHP Framework } — [ WE CAN DO IT JUST THINK ]

    回复
    2016-03-8
    • 第七星尘

      部署时出错,请先确认是否按照上面步骤执行(例如说目录权限有没有)。然后进Application/Runtime/Log看一下日志,或清除下Application/Runtime/目录下所有文件(缓存来的)试试

      回复
      2016-03-8
      • 十七

        目录下没有日志,是权限的问题么,大神

        回复
        2016-03-25
        • 第七星尘

          没有日志有两种情况,一是重定向错误导致根本没访问到showdoc,自然不会有日志;二是没有写日志权限

          回复
          2016-03-25
  20. 张小强 #20

    我刚才一直没重启nginx….重启之后注册可以进去了,但是貌似js有问题,只能显示 字符框,但是没有对应的提示字符,能截图就好了。

    回复
    2016-03-8
  21. 张小强 #21

    [root@localhost Logs]# ls -lrt
    total 0
    空的。

    回复
    2016-03-8
  22. 张小强 #22

    不行啊~~
    完整教程是
    location / {
    if (!-e $request_filename) {
    rewrite ^(.*)$ /index.php?s=$1 last;
    break;
    }
    }

    我的nginx

    location /showdoc/ {
    if (!-e $request_filename) {
    rewrite ^/showdoc/index.php(.*)$ /showdoc/index.php?s=$1 last;
    rewrite ^/showdoc/(.*)$ /showdoc/index.php?s=$1 last;
    break;
    }
    }

    首页能看到说明已经定位到/showdoc/了
    但是 /showdoc/index.php/home/user/login 就找不到在哪儿了,这是哪儿的问题?
    /showdoc/index.php/home/item/show?item_id=2 这些都找不到。

    回复
    2016-03-8
    • 第七星尘

      看看ApplicationRuntimeLogs日志有没有说什么

      回复
      2016-03-8
      • helloworld

        我也是这样,登录成功跳转后一片空白。没有错误日志

        回复
        2016-03-8
        • 第七星尘

          能登录成功则证明重定向功能是没问题的了。试着重启下吧

          回复
          2016-03-8
  23. 张小强 #23

    还是不行,除了首页 其他都是404

    回复
    2016-03-8
    • 第七星尘

      我试过这代码是可行的。你试着按完整教程弄一下http://blog.csdn.net/tde007/article/details/50212001

      回复
      2016-03-8
  24. 张小强 #24

    额。。我是黏贴过去的。刚才少粘了个}

    回复
    2016-03-8
  25. 张小强 #25

    我写错了
    确实配置了
    location /showdoc/ {
    if (!-e $request_filename) {
    rewrite ^/index.php/(.*)$ /index.php?s=$1 last;
    rewrite ^/(.*)$ /index.php?s=$1 last;
    break;
    }

    回复
    2016-03-8
    • 第七星尘

      这配置还是不对啊。你把文章的代码直接复制过去

      回复
      2016-03-8
  26. 张小强 #26

    应用放到了nginx 的html目录下 结构是
    /usr/local/nginx/html/showdoc/Applicaiton这些了
    nginx.conf
    location / {

    if (!-e $request_filename) {
    rewrite ^/index.php/(.*)$ /index.php?s=$1 last;
    rewrite ^/(.*)$ /index.php?s=$1 last;
    break;
    }
    }

    回复
    2016-03-8
  27. 张小强 #28

    大神,我部署完,只有首页可以显示,其他都是404

    回复
    2016-03-8