Nginx作為一種高性能的web服務(wù)器,經(jīng)常被用來(lái)搭建PHP網(wǎng)站。在 PHP 網(wǎng)站中,通常都會(huì)有一個(gè)入口文件 index.php ,這個(gè)文件會(huì)被大部分的請(qǐng)求所調(diào)用。然而,有時(shí)我們希望隱藏 index.php ,使得網(wǎng)站更加美觀、安全、清晰。
要實(shí)現(xiàn)這個(gè)目標(biāo),首先需要使用 Nginx 的 rewrite 模塊來(lái)重寫(xiě) url。以下是一些重寫(xiě)規(guī)則的示例。
# 當(dāng) url 中只有 "index.php" 時(shí),去掉 index.php 。
if ($request_uri ~* "^/index\.php$") {
rewrite ^(.*)$ / permanent;
}
# 將形如 "/index.php/home" 的 url 重寫(xiě)為 "/home" 。
if ($request_uri ~* "^/index\.php/(.*)$") {
rewrite ^/index\.php/(.*)$ /$1 permanent;
}
# 將形如 "/index.php?go=home" 的 url 重寫(xiě)為 "/home" 。
if ($args ~* "go=(.*)") {
set $url $1;
rewrite ^(.*)$ /$url permanent;
}
這些規(guī)則將譬如 “/index.php” 或 “index.php/home” 之類的 URL 重寫(xiě)為 “/” 或 “/home” 。不僅如此,我們還可以使用 Nginx 自帶的 try_files 模塊來(lái)訪問(wèn)隱藏文件夾或文件,比如下面是一個(gè)典型的配置文件:
server {
listen 80 default_server;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
這個(gè)配置文件指定了站點(diǎn)根目錄的地址,以及服務(wù)器應(yīng)該查找的默認(rèn)文件。而在 location / 中,服務(wù)器會(huì)嘗試使用 $uri 變量來(lái)訪問(wèn)請(qǐng)求的文件。如果沒(méi)有找到且以 “/” 結(jié)尾,那么會(huì)嘗試使用 $uri/ 變量來(lái)查找。如果沒(méi)有找到,或者找到的是隱藏的文件夾/文件,那么將會(huì)調(diào)用 /index.php 進(jìn)行處理。
上述配置文件還會(huì)調(diào)用 fastcgi_params 中的 PHP-CGI 模塊以處理 PHP 文件,會(huì)檢查訪問(wèn)的文件是否是被 Nginx 禁止的 .ht 資源訪問(wèn)請(qǐng)求。
總之,Nginx 的 rewrite 模塊和 try_files 模塊是實(shí)現(xiàn)隱藏 index.php 的基礎(chǔ)。結(jié)合使用這兩個(gè)模塊,我們可以非常方便地隱藏網(wǎng)站的入口腳本,提高網(wǎng)站的安全性和美觀性,也讓網(wǎng)站的接口更加清晰,更加優(yōu)美。
網(wǎng)站導(dǎo)航
- zblogPHP模板zbpkf
- zblog免費(fèi)模板zblogfree
- zblog模板學(xué)習(xí)zblogxuexi
- zblogPHP仿站zbpfang