ThinkPHP框架里隱藏index.php

字號(hào):


    本文所寫(xiě)的配置在ThinkPHP3.2.2上測(cè)試過(guò)。按理也兼容其它版本。
    首先修改配置文件:
    'URL_CASE_INSENSITIVE' => true, // 默認(rèn)false 表示URL區(qū)分大小寫(xiě) true則表示不區(qū)分大小寫(xiě)
    'URL_MODEL' => 2, // URL訪問(wèn)模式,可選參數(shù)0、1、2、3,代表以下四種模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 默認(rèn)為PATHINFO 模式 
    Nginx
    推薦:
    location / {
    try_files $uri $uri/ /index.php?s=$uri&$args;
    }
    意思是:如果第一個(gè)$uri不存在,就訪問(wèn)$uri/;如果$uri/還不存在,訪問(wèn)/index.php?s=$uri&$args??梢院竺娓芏鄠€(gè)。
    try_files 
    語(yǔ)法: try_files file1 [file2 ... filen] fallback 
    默認(rèn)值: 無(wú) 
    作用域: location
    再例如:
    try_files $uri = 404
    什么意思呢?uri不能成功訪問(wèn),那好,那就給你個(gè)404吧。
    但是在網(wǎng)上找到的文章大部分是這樣配置的:
    location / {
    if (!-e $request_filename) {
    rewrite ^/(.*)$ /index.php?/$1 last;
    break;
    }
    }
    實(shí)際上不可行。
    Apache
    在根目錄新建.htaccess文件:
    <IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    </IfModule>
    IIS環(huán)境
    如果你的服務(wù)器環(huán)境支持ISAPI_Rewrite的話,可以配置httpd.ini文件,添加下面的內(nèi)容:
    RewriteRule (.*)$ /index\.php\?s=$1 [I]
    在IIS的高版本下面可以配置web.Config,在中間添加rewrite節(jié)點(diǎn):
    <rewrite>
    <rules>
    <rule name="OrgPage" stopProcessing="true">
    <match url="^(.*)$" />
    <conditions logicalGrouping="MatchAll">
    <add input="{HTTP_HOST}" pattern="^(.*)$" />
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}” matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="index.php/{R:1}" />
    </rule>
    </rules>
    </rewrite>
    附錄
    Nginx完整配置文
    test.com.conf
    server
    {
    listen 80;
    server_name test.com;
    index index.php index.html;
    root /wwwroot/test.com/;
    # unless the request is for a valid file (image, js, css, etc.), send to bootstrap
    location / {
    try_files $uri $uri/ /index.php?s=$uri&$args;
    }
    location ~ \.php
    {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    set $path_info "";
    set $real_script_name $fastcgi_script_name;
    if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
    set $real_script_name $1;
    set $path_info $2;
    }
    fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
    fastcgi_param SCRIPT_NAME $real_script_name;
    fastcgi_param PATH_INFO $path_info;
    }
    location /status {
    stub_status on;
    access_log off;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
    expires 24h;
    }
    location ~ .*\.(js|css)?$
    {
    expires 12h;
    }
    if ( $fastcgi_script_name ~ \..*\/.*php ) {
    return 403;
    }
    access_log logs/test.com_access.log main;
    error_log logs/test.com_error.log notice;
    }