可以通過URL重寫隱藏應用的入口文件index.php
,下面是相關服務器的配置參考:
[ Apache ]
- 啓用rewrite模塊
- sudo a2enmod rewrite 或者 sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
- 編輯配置文件/etc/apache2/apache2.conf,找到自己web根目錄對應的位置
- <Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory> - 將AllowOverride None 改爲AllowOverride All
- 重啓服務sudo service apache2 restart
- 把下面的內容保存爲.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