首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

.htaccess 完全指南:從入門到實戰的分散式配置精要

     編輯:PHP 相關知識

.htaccess(分散式配置檔) 是 Apache HTTP Server 的核心特性,允許在目錄層級覆蓋主配置,無需修改 httpd.conf 即可實現 URL 重寫、存取控制、快取策略、錯誤頁面等功能。本文系統梳理核心語法、常見場景與避坑指南。

核心概念與啟用條件

什麼是 .htaccess?

  • 純文字檔,放置於任意目錄,作用於該目錄及所有子目錄
  • 子目錄規則覆蓋父目錄與主配置
  • 必須以 ASCII 模式 上傳,權限建議 644

啟用前提:

# httpd.conf 或虛擬主機配置中

    AllowOverride All  # 允許所有指令;生產建議限制:AllowOverride AuthConfig FileInfo Indexes Limit
    Require all granted

若 AllowOverride None,.htaccess 將完全失效。虛擬主機商常禁用此功能,使用前請確認。

自訂檔名(可選)

# httpd.conf
AccessFileName .config  # 改用 .config 而非 .htaccess

八大經典應用場景實戰

1. 自訂錯誤頁面

ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
ErrorDocument 403 /errors/403.html

路徑相對於網站根目錄。支援動態腳本:ErrorDocument 404 /error_handler.php?code=404。

2. URL 重寫(RewriteRule)—— 核心功能

RewriteEngine On
RewriteBase /

# 靜態化:/article/123.html → /article.php?id=123
RewriteRule ^article/([0-9]+)\.html$ article.php?id=$1 [L,QSA]

# 強制 HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 統一 WWW
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

關鍵標誌位:

標誌含義
LLast,停止後續規則處理
R=301永久重導向(SEO 傳遞權重)
R=302暫時重導向
QSAQuery String Append,合併查詢字串
NCNo Case,大小寫不敏感
FForbidden,回傳 403

3. 存取控制:IP 白名單/黑名單

# 僅允許特定 IP(管理後台)
Order Deny,Allow
Deny from all
Allow from 203.0.113.0/24 198.51.100.50

# 封鎖惡意 IP
Order Allow,Deny
Allow from all
Deny from 192.0.2.100 198.51.100.0/24

Apache 2.4+ 新語法:


    Require ip 203.0.113.0/24
    Require not ip 192.0.2.100

4. 目錄瀏覽控制

# 禁止目錄列表(安全預設)
Options -Indexes

# 或允許特定目錄瀏覽

    Options +Indexes
    IndexOptions FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=*

5. 密碼保護目錄(基本認證)

# .htaccess
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd  # 絕對路徑,不可在網站根目錄
Require valid-user

產生密碼檔:htpasswd -c /etc/apache2/.htpasswd admin。

6. 強制檔案下載而非瀏覽器開啟


    ForceType application/octet-stream
    Header set Content-Disposition "attachment"

7. 靜態資源快取優化


    ExpiresActive On
    ExpiresByType image/jpg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresDefault "access plus 2 days"



    
        Header set Cache-Control "public, max-age=31536000, immutable"
    

8. PHP 設定覆蓋(需允許 php_flag/php_value)

php_value upload_max_filesize 50M
php_value post_max_size 60M
php_value max_execution_time 300
php_flag display_errors Off

建立 .htaccess 的實用技巧

Windows 系統無法直接新建「.開頭檔名」

  • CMD:copy nul .htaccess 或 type nul > .htaccess
  • PowerShell:New-Item .htaccess -ItemType File
  • 編輯器:VS Code、Notepad++ 直接「另存新檔」為 .htaccess
  • FTP 上傳:本地命名 htaccess.txt,上傳後改名

除錯與避坑指南

問題原因解決
500 Internal Server Error語法錯誤、模組未載入、指令不被允許檢查 error_log;確認模組載入;縮小 AllowOverride 範圍測試
重寫規則不生效RewriteEngine Off、路徑錯誤、衝突規則加上 RewriteBase;用 RewriteLog 除錯(僅 2.4-)
無限重導向迴圈規則互相觸發善用 L 標誌;加入 RewriteCond 排除目標路徑
子目錄規則不生效父目錄 AllowOverride None檢查父目錄配置
密碼保護彈窗不出現AuthUserFile 路徑錯誤、權限不足使用絕對路徑;確認 Apache 讀取權限

效能考量:為什麼生產環境建議避免 .htaccess?

  • 每次請求 Apache 需遞迴讀取所有父目錄的 .htaccess,IO 開銷大
  • 主配置 httpd.conf 僅啟動讀取一次,效能優於 .htaccess
  • 最佳實踐:開發/測試用 .htaccess 靈活調試,上線前遷移至虛擬主機配置

Nginx 用戶注意

Nginx 不支援 .htaccess。所有規則需寫在 nginx.conf 或站點配置中。常見轉換:

  • RewriteRule → rewrite 指令
  • 拒絕存取 → deny/allow
  • 錯誤頁面 → error_page
  • 快取頭 → expires/add_header

總結

.htaccess 是 Apache 獨有的強大工具,掌握重寫、存取控制、快取、錯誤處理四大核心場景,即可應對 90% 的目錄級配置需求。記住:開發靈活、上線遷移、效能優先,才是專業運維態度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved