[转载]让Nginx支持ThinkPHP的URL重写和PATHINFO - 潺莪 - 博客园

[转载]让Nginx支持ThinkPHP的URL重写和PATHINFO – 潺莪 – 博客园.

ThinkPHP支持通过PATHINFO和URL rewrite的方式来提供友好的URL,只需要在配置文件中设置 ‘URL_MODEL’ => 2 即可。在Apache下只需要开启mod_rewrite模块就可以正常访问了,但是Nginx中默认是不支持PATHINFO的,所以我们需要修改 nginx.conf文件。

网上搜了很多方法都不奏效,研究了一天,发现通过以下的配置可以完美支持 ‘URL_MODEL’ => 2 的情况了

<span class="pln">location </span><span class="pun">/</span><span class="pln">project</span><span class="pun">/</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    index  index</span><span class="pun">.</span><span class="pln">php</span><span class="pun">;</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!-</span><span class="pln">e $request_filename</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        rewrite  </span><span class="pun">^</span><span class="str">/project/</span><span class="pun">(.*)</span><span class="pln">$  </span><span class="pun">/</span><span class="pln">project</span><span class="pun">/</span><span class="pln">index</span><span class="pun">.</span><span class="pln">php</span><span class="pun">/</span><span class="pln">$1  </span><span class="kwd">last</span><span class="pun">;</span><span class="pln">
        </span><span class="kwd">break</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
 
location </span><span class="pun">~</span><span class="pln"> </span><span class="pun">.+</span><span class="pln">\.php</span><span class="pun">(</span><span class="pln">$</span><span class="pun">|</span><span class="str">/) {
    set $script    $uri;
    set $path_info  "/";
    if ($uri ~ "</span><span class="pun">^(.+</span><span class="pln">\.php</span><span class="pun">)(/.+)</span><span class="str">") {
        set $script     $1;
        set $path_info  $2;
     }
          
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index  index.php?IF_REWRITE=1;
    include /APMServ/nginx/conf/fastcgi_params;
    fastcgi_param PATH_INFO $path_info;
    fastcgi_param SCRIPT_FILENAME  $document_root/$script;
    fastcgi_param SCRIPT_NAME $script;
}</span>

这里先把project下的请求都转发到index.php来处理,亦即ThinkPHP的单一入口文件;然后把对php文件的请求交给fastcgi来处理,并且添加对PATH_INFO的支持。

重启Nginx以后,http://localhost/project/Index/insert, http://localhost/project/index.php/Index/delete 这样的URL都可以正确访问了。

还有一个地方需要注意的是,Nginx配置文件里 if 和后面的括号之间要有一个空格,不然会报unknown directive错误。

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

登录

注册