nginx配置ThinkPHP5二級目錄訪問
以前寫過一次類似的配置經歷,然後過了N長時間,再次配置又發現各種問題,這裡總結一下。
目標效果
對於web根目錄下的如下專案資料夾
可以通過 http://www.example.com/專案名/模組名/方法名 進行訪問
第一步
如果不能正常訪問,報404錯誤,建議看一看你的nginx配置中是如何處理php的。因為ThinkPHP中index.php並不一定都是在URL中末尾出現的,所以要使用
location ~ .php($|/)
而不是
location ~ .php$
例如如下配置:
location ~ \.php($|/) {
root /home/html;
fastcgi_pass unix: /var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
第二步
進行URL重寫,將預設訪問URL中的index.php?s=通過rewrite隱藏
location /blog/ {
index index.php index.html index.htm;
if (!-e $request_filename ){
rewrite ^/blog/(.*)$ /blog/index.php?s=$1 last;
}
}
其實nginx的二級目錄配置都是一樣的套路,這裡也可以參考以前寫過的另一篇配置記錄:nginx配置phalcon
有的小夥伴配置後出現訪問資原始檔報錯模組不存在錯誤,這裡只需新增對靜態資原始檔的特殊處理即可,例如:
location ~ .*\.(css|js|gif|jpg|jpeg|png|bmp|swf)$ {
root /home/html;
expires 30d;
}