我的網站有一種不尋常的設定:
site.tld= Gatsby 網站,其中包含一些靜態頁面,例如 /example1 和 /example2 等。site.tld/blog= 一個 WordPress 網站
現在我想讓用戶訪問一個新頁面site.tld/mynewpage,它實際上是 WordPress 網站上的一個頁面。所以實際的 URL 是site.tld/blog/mynewpage.
為了實作這一點,我定義了這個規則:
RewriteRule ^mynewpage/$ /blog/mynewpage/ [L]
什么樣的作品。當我瀏覽到site.tld/mynewpage.
我的解釋是,如果我現在瀏覽到site.tld/blog/mynewpage,它會給我一個 404 或者它會“自動重定向”到site.tld/mynewpage. 但這些都不會發生。地址欄仍然顯示site.tld/blog/mynewpage,我正確地看到了該頁面。所以現在我有兩個鏈接指向mynewpage. 對于 SEO 來說,這沒什么大不了的,因為我可以將規范 URL 設定為site.tld/mynewpage,但讓我煩惱的是,這個“舊 URL”site.tld/blog/mynewpage仍然存在。
有沒有辦法解決這個問題?我天真地嘗試從site.tld/blog/mynewpage到重定向,site.tld/mynewpage但這給了我“重定向太多”,我認為這是因為它是一個無限回圈。
任何幫助表示贊賞 =)
uj5u.com熱心網友回復:
您需要確保僅將“直接”請求重定向回根目錄,而不是根檔案中現有重寫的重寫請求.htaccess(這將導致重定向回圈)。
下面添加到頂部的的/blog/.htaccess檔案:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^mynewpage/$ /$0 [R=301,L]
這假設 URL 有一個尾部斜杠,就像在你的“作業”重寫指令中一樣。但是,您的所有示例都省略了尾部斜杠?
乍一看,這可能“看起來”像是重定向到相同的URL,但是,因為.htaccess檔案位于子目錄中,它確實從重定向的 URL 中洗掉了子目錄。IE。它從 重定向/blog/mynewpage/到/mynewpage/。
該RewriteRule 模式匹配相對于.htaccess檔案位置的 URL 路徑。因此,由于我們位于/blog子目錄中,因此正則運算式^mynewpage/$匹配/blog/mynewpage/. 我們重定向回/mynewpage/使用$0反向參考,它包含與RewriteRule 模式匹配的 URL 路徑。
對REDIRECT_STATUS環境變數的檢查可確保僅重定向(來自客戶端的)直接請求,而不是您現有的重寫所重寫的請求。
注意:首先使用 302(臨時)重定向進行測驗以避免快取問題。
uj5u.com熱心網友回復:
將 301 重定向添加到您的舊 URL -site.tld/blog/mynewpage到site.tld/mynewpage
301 重定向可以通過 .htaccess 添加,如下所示
Redirect 301 /oldurl/ http://www.example.com/newurl/
或者,如果您有自定義 php 頁面,則可以嘗試使用以下代碼
<?php
header("Location: https://www.example.com/newurl", true, 301);
exit();
?>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/370211.html
