假設我有一個 web 檔案夾:
/index.html
/assets/css/styles.css
/assets/images/logo.png
/something.html
/holdingpage.html
/finale.html
/folder/somefile.html
/else.html
/PDFs/something.pdf
我想為此設定一個 htaccess RedirectMatch 以“捕獲”除 html 檔案之外的所有檔案finale.html并重定向到那里。
到目前為止,我所擁有的是:
RedirectMatch 302 ".*/$" "/finale.html"
哪個正確捕獲沒有檔案名(索引)的所有檔案夾。我需要的是捕獲所有的 html,但不是那個目標。
RedirectMatch 302 ".*(\.html)$" "/finale.html" # This loops obviously.
所以我試著更具體一些;
RedirectMatch 302 ".*!(finale.html)$" "/finale.html"
RedirectMatch 302 ".*!(finale\.html)$" "/finale.html"
但這不會捕獲其他檔案。同樣從外觀上看,我希望這也能捕獲資產和影像。
我正在嘗試找到一個 redirectMatch 來找到每個不是.html的頁面并將其重定向到該頁面。 finale.html
IT 應該是 redirectMatch而不是rewriteCond/ rewriteRule。用戶需要看到他們被重定向。
我想我想要類似的東西:
RedirectMatch 302 ".*((\.html) BUT NOT (finale.html))$" "/finale.html"
我已經閱讀了Apache 檔案,但這并沒有真正詳細說明這個概念。
uj5u.com熱心網友回復:
您可以使用負前瞻來匹配.html除/finale.html(在檔案根目錄中)之外的所有檔案。
例如:
RedirectMatch 302 (?!^/finale\.html$)^/. \.html$ /finale.html
IT 應該是 redirectMatch 而不是
rewriteCond/rewriteRule。用戶需要看到他們被重定向。
我不確定這里的邏輯。mod_rewrite 可以產生與實際上相同的外部重定向RedirectMatch,如果您有現有的 mod_rewrite 指令(主要是為了避免意外沖突),您可能應該在這里使用 mod_rewrite。
使用 mod_rewrite,您可以使用負前瞻進行類似于上面的操作。例如:
RewriteEngine On
RewriteRule (?!^finale\.html$)^. \.html$ /finale.html [R=302,L]
或者,使用附加條件對 進行例外處理finale.html,而不是使用否定的前瞻。例如:
RewriteCond %{REQUEST_URI} !^/finale\.html$
RewriteRule \.html$ /finale.html [R=302,L]
這可以說更容易閱讀并且可能更有效(至少是正則運算式)。
這匹配所有以 結尾的 URL .html,除了/finale.html(完全)和外部 302 重定向到/finale.html.
在旁邊:
RedirectMatch 302 ".*!(finale.html)$" "/finale.html"
正!則運算式中間的 是這里的文字字符。! 前綴運算子是 mod_rewrite 的一個特性。(它是一個前綴運算子,而不是正則運算式語法本身的一部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/430777.html
