nginx與php:巧妙實現多域名及靜態、偽靜態頁面共存
本文探討如何在單一目錄下,利用Nginx和PHP同時處理多個域名,并支持靜態頁面和偽靜態頁面的訪問。
場景描述
假設有兩個域名:www.example.com 和 m.example.com,它們都指向同一個目錄。我們需要實現:
- www.example.com/about.html 直接訪問靜態頁面 about.html。
- m.example.com/about.html 實際上訪問 m.example.com/index.php?page=about,但URL顯示為偽靜態的 m.example.com/about.html。
解決方案
立即學習“PHP免費學習筆記(深入)”;
www.example.com 的靜態頁面無需特殊配置,只需將 .html 文件放置在服務器目錄即可。
對于 m.example.com 的偽靜態處理,我們需要在Nginx配置文件中添加規則。
Nginx 配置示例
以下是一個示例Nginx配置文件,實現了上述功能:
server { listen 80; server_name www.example.com m.example.com; root /path/to/your/webroot; # 替換為你的網站根目錄 index index.html index.php; location ~ .php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 替換為你的php-fpm socket路徑 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* (.*).html { if ($host = m.example.com) { rewrite ^/(.*).html$ /index.php?page=$1 last; } } }
配置說明:
- server_name: 定義了兩個域名。
- root: 指定網站根目錄,請替換為你的實際路徑。
- location ~ .php$: 配置PHP處理程序,請根據你的PHP-FPM socket路徑進行修改。
- location ~* (.*).html: 匹配所有.html結尾的URL。
- if ($host = m.example.com): 僅當主機名為m.example.com時執行重寫規則。
- rewrite ^/(.*).html$ /index.php?page=$1 last;: 將.html URL重寫為index.php?page=…,last標志表示重寫后不再繼續匹配其他location塊。
通過此配置,www.example.com 將直接提供靜態文件,而 m.example.com 將使用偽靜態規則,將.html請求轉發給PHP處理。 記住替換配置文件中的占位符為你的實際路徑和PHP-FPM配置。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END