ThinkPHP5.0 Linux Apache/Nginx重寫URL配置

  • 做者系統是Ubuntu,CentOS及其餘linux發行版請自行變動
    PHP框架是ThinkPHP5.0,官方文檔說的有些模糊,因此自行補充了一下
    有錯誤歡迎隨時指出

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

[Apache]

1.啓用rewrite模塊html

2.sudo a2enmod rewrite 或者 sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.loadlinux

3.編輯配置文件/etc/apache2/apache2.conf,找到本身web根目錄對應的位置nginx

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

4.將AllowOverride None 改成AllowOverride Allweb

5.重啓服務sudo service apache2 restartapache

6.把下面的內容保存爲.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:iview

server { // …..省略部分代碼
   root /var/www/html;
   //找到這個模塊,而後填入下面的配置
 }
  location / { // …..省略部分代碼
   if (!-e $request_filename) {
   rewrite  ^(.*)$  /index.php?s=/$1  last;
   break;
    }
 }

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

若是你的應用安裝在二級目錄,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
相關文章
相關標籤/搜索