首頁  >  問答  >  主體

htcaccess 重寫規則不起作用

我正在開發一個項目,我正在嘗試在我的網站的根目錄中進行 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 移動到其他資料夾,當然也編輯了路徑,但沒有成功。

任何人都可以提供其他故障排除提示嗎?如何檢查重定向在背景實際執行的操作?

P粉848442185P粉848442185251 天前368

全部回覆(1)我來回復

  • P粉218775965

    P粉2187759652024-01-17 17:55:15

    此規則的「問題」在於它也與重寫的URL 相符(具體來說,[^/] index.php 相符),因此會再次重寫入時間到 /screenshot-of-the-week/screenshot/index.php?id=index.phpid=123 參數被覆寫)。那麼,我希望您的腳本產生 404 回應(不是 Apache)?

    要解決此問題,您應該使正規表示式更加具體和/或使用 END 標誌 (Apache 2.4) 來防止重寫引擎進行額外的循環(和第二次重寫)。

    在您的範例中,您正在傳遞一個數值 - 因此,如果您只期望一個數值,則僅符合數字。

    例如:

    RewriteRule ^screenshot-of-the-week/screenshot/(\d+)$ /screenshot-of-the-week/screenshot/index.php?id= [END]

    請注意,我還在正規表示式中添加了尾隨$,否則您的網站可能會被濫用,因為任何內容都可以附加到URL,並且相同的資源將被服務。 (在您的原始規則中附加 / 將產生相同的回應。)

    (我假設您的 .htaccess 檔案位於文件根目錄中。)


    MWL 測試器僅對檔案進行一次遍歷。這不是真正的 Apache 伺服器的工作方式。因此,MWL 測試儀無法偵測重寫/重定向循環。

    當您造訪 screenshot-of-the-week/screenshot/ 時,規則不會被處理(正規表示式不符)。 mod_dir 提供 DirectoryIndex 文件 (index.php),但沒有 id 參數。

    回覆
    0
  • 取消回覆