我正在開發一個項目,我正在嘗試在我的網站的根目錄中進行 URL 重寫。現在的 .htaccess
如下
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L] RewriteRule ^screenshot-of-the-week/screenshot/([^/]+) /screenshot-of-the-week/screenshot/index.php?id=
我的網站啟用了重寫。我已經透過 htaccess 測試器檢查了程式碼,它顯示了正確的值。
然而,當我造訪 screenshot-of-the-week/screenshot/123
為例時,我得到了 404 頁面。當我訪問 screenshot-of-the-week/screenshot/
時,它工作得很好。
此外,當手動轉到“真實”URL 時,它也按預期工作:screenshot-of-the-week/screenshot/index.php?id=123
#我似乎無法弄清楚問題出在哪裡,並嘗試將 .htaccess
移動到其他資料夾,當然也編輯了路徑,但沒有成功。
任何人都可以提供其他故障排除提示嗎?如何檢查重定向在背景實際執行的操作?
此規則的「問題」在於它也與重寫的URL 相符(具體來說,
[^/]
與index.php
相符),因此會再次重寫入時間到/screenshot-of-the-week/screenshot/index.php?id=index.php
(id=123
參數被覆寫)。那麼,我希望您的腳本產生 404 回應(不是 Apache)?要解決此問題,您應該使正規表示式更加具體和/或使用
END
標誌 (Apache 2.4) 來防止重寫引擎進行額外的循環(和第二次重寫)。在您的範例中,您正在傳遞一個數值 - 因此,如果您只期望一個數值,則僅符合數字。
例如:
請注意,我還在正規表示式中添加了尾隨
$
,否則您的網站可能會被濫用,因為任何內容都可以附加到URL,並且相同的資源將被服務。 (在您的原始規則中附加/
將產生相同的回應。)(我假設您的
.htaccess
檔案位於文件根目錄中。)MWL 測試器僅對檔案進行一次遍歷。這不是真正的 Apache 伺服器的工作方式。因此,MWL 測試儀無法偵測重寫/重定向循環。
當您造訪
screenshot-of-the-week/screenshot/
時,規則不會被處理(正規表示式不符)。 mod_dir 提供DirectoryIndex
文件 (index.php
),但沒有id
參數。