Ubuntu MATE LTS16.04下Apache&Nginx配置Thinkphp5.0.14重寫URL

可以通過URL重寫隱藏應用的入口文件index.php,下面是相關服務器的配置參考:

[ Apache ]

  1. 啓用rewrite模塊
  2. sudo a2enmod rewrite 或者 sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
  3. 編輯配置文件/etc/apache2/apache2.conf,找到自己web根目錄對應的位置
  4. <Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    </Directory>
  5. 將AllowOverride None 改爲AllowOverride All
  6. 重啓服務sudo service apache2 restart
  7. 把下面的內容保存爲.htaccess文件放到應用入口文件的同級目錄下(默認已創建,如果沒有自己創建)
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

[ Nginx ]

在Nginx低版本中,是不支持PATHINFO的,但是可以通過在Nginx中配置轉發規則實現,

編輯文件/etc/nginx/sites-available/default:

 server { // …..省略部分代碼
   root /var/www/html;
   //找到這個模塊,然後填入下面的配置
 }

  location / { // …..省略部分代碼
   if (!-e $request_filename) {
   rewrite  ^(.*)$  /index.php?s=/$1  last;
   break;
    }
 }

其實內部是轉發到了ThinkPHP提供的兼容URL,利用這種方式,可以解決其他不支持PATHINFO的WEB服務器環境。

如果你的應用安裝在二級目錄,Nginx的僞靜態方法設置如下,其中/tp5/public/是所在的目錄名稱。

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

原來的訪問URL:

http://serverName/index.php/模塊/控制器/操作/[參數名/參數值...]

設置後,我們可以採用下面的方式訪問:

http://serverName/模塊/控制器/操作/[參數名/參數值...]

如果你沒有修改服務器的權限,可以在index.php入口文件做修改,這不是正確的做法,並且不一定成功,視服務器而定,只是在框架執行前補全$_SERVER['PATH_INFO']參數

$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI' ];
最後重啓服務器sudo service nginx restart
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章