一直在嘗試使用查詢字串撰寫重定向規則,但沒有成功。
我有 URLexample.com/blog/?page=1或example.com/blog/?hello,所以查詢字串中的內容并不重要。如何撰寫重定向規則,以便它剪切查詢字串并重定向到查詢字串之前的 URL。例如,這兩個 URL 都必須重定向到,example.com/blog/以便該 URL 不包含任何查詢字串。
我正在嘗試
RewriteRule ^blog/?$ blog/ [R=301,L,NE]但被重定向到 404 頁面。
還嘗試
RewriteRule ^blog/?$ /blog/ [R=301,L,NE]并收到頁面無法正常作業的訊息,“URL”將您重定向了太多次。
順便說一句,我使用的技術是帶有 htaccess 插件的 Gatsby。
uj5u.com熱心網友回復:
要洗掉查詢字串,您首先需要檢查是否有要洗掉的查詢字串,否則,它什么也不做。
例如,要從/blog/?<query-string>您那里洗掉查詢字串,請執行以下操作:
RewriteCond %{QUERY_STRING} .
RewriteRule ^(blog)/?$ /$1/ [QSD,R=302,L]
這匹配 URL 路徑blog/(尾隨斜杠可選)并重定向到/blog/(帶有尾隨斜杠)。您的示例 URL 包含尾部斜杠,但您的正則運算式似乎暗示尾部斜杠是可選的?
前面的條件(RewriteCond指令)檢查QUERY_STRING服務器變數以確保它是非空的(即它匹配單個字符,由點表示)。
替換字串中的$1反向參考包含來自前面模式中捕獲組的值。IE。本例中的“博客”。這只是節省了重復。你可以很容易地改寫。RewriteRule RewriteRule ^blog/?$ /blog/ [QSD,R,L]
( QSDQuery String Discard) 標志從重定向回應中洗掉原始查詢字串,否則,這將默認通過(這將創建重定向回圈)。
如果請求不包含查詢字串,則此規則不執行任何操作(因為條件將失敗)。
如果這是永久的,則將 302(臨時)重定向更改為 301(永久),但前提是您確認這按預期作業。301 由瀏覽器持久快取,因此可能會使測驗出現問題。
看看你現有的規則:
正在嘗試
RewriteRule ^blog/?$ blog/ [R=301,L,NE]但被重定向到 404 頁面。
默認情況下,相對替換字串(即。blog/)被視為相對于包含.htaccess檔案的目錄,然后此“目錄前綴”作為相對 URL 的前綴,因此(默認情況下)會導致格式錯誤的重定向的形式https://example.com/path/to/public_html/blog/。
還嘗試
RewriteRule ^blog/?$ /blog/ [R=301,L,NE]并收到該頁面無法正常作業的訊息,“url”將您重定向了太多次。
這不是檢查(或洗掉)查詢字串,所以這基本上只是重定向到自身 - 一個無休止的重定向回圈。
從任何URL中洗掉任何查詢字串
我寫什么規則,從任何 URL 中洗掉查詢字串。
修改RewriteRule 模式以匹配任何 URL 并重定向到相同的 URL。例如:
RewriteCond %{QUERY_STRING} .
RewriteRule (.*) /$1 [QSD,R=302,L]
這需要在任何現有的重寫之前放在根檔案的頂部。 .htaccess
如果.htaccess檔案位于子目錄(不是根目錄)中,那么您將需要執行以下操作,因為$1反向參考(如上所用)將不包含完整的根目錄相對 URL 路徑。
RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI} [QSD,R=302,L]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/459234.html
