Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Apache URL 重寫解決目錄結尾斜線問題:避免 301 重導向與相對路徑失效

編輯:關於伺服器

問題本質

用戶訪問 https://example.com/~quux/foo (無尾斜線),Apache 視為檔案 foo 而非目錄,返回 404 或觸發 301 重導向至 /~quux/foo/,導致:

  • 額外一次 HTTP 請求延遲。
  • 目錄頁內相對路徑資源 (如 image.gif) 解析錯誤為 /~quux/image.gif。

解決方案:外部重導向 (R 旗標) 強制補全斜線

RewriteEngine on
RewriteBase /~quux/
# 精確匹配 foo 結尾,重導向到 foo/
RewriteRule ^foo$ foo/ [R]

通用規則:自動為所有目錄請求補全斜線

RewriteEngine on
RewriteBase /~quux/
# 條件: 請求路徑對應實體目錄存在 (-d)
RewriteCond %{REQUEST_FILENAME} -d
# 規則: 非斜線結尾的路徑,加上斜線並 301 重導向
RewriteRule ^(.+[^/])$ $1/ [R=301,L]

關鍵點

  • 必須使用外部重導向 (R/R=301),讓瀏覽器地址列更新,後續相對路徑才正確解析。
  • 內部重寫 (無 R 旗標) 僅改變內部檔案映射,瀏覽器仍以無斜線 URL 為基準解析相對路徑,圖片/樣式會 404。
  • RewriteBase 設定需與實際虛擬路徑一致。
  • .htaccess 同樣適用,但會覆蓋主配置,注意優先序。
Copyright © Windows教程網 All Rights Reserved