我一直在嘗試創建從主頁子檔案夾中的頁面到同一子檔案夾中的另一個頁面的 301 重定向。例子:
(1) samedomain.com/homepage/discussions/62-info到 (2) samedomain.com/homepage/newinfopost
但是,它根本不起作用,我已經嘗試了很多 RewriteRule 代碼。
一些相關資訊:
- 這兩個頁面都是由我的軟體從資料庫中提取的,該軟體安裝在主頁子檔案夾中
- 這兩個頁面都是友好的 URL。我的軟體在主頁中安裝了另一個 .htaccess 檔案來完成這項作業
- 重寫引擎開啟
我試過的:
- 我嘗試暫時禁用友好的 URL 并從子檔案夾中洗掉 .htaccess,只保留主 .htaccess 活動
- .htaccess 檔案(來自主檔案夾)正在作業。我用不同的規則對其進行了測驗,很好
- 我嘗試過的一些 RewriteRules:
RewriteRule 主頁/discussions/62-info/(.*) https://samedomain.com/homepage/newinfopost/$1 [L,R=301]
RewriteRule 主頁/討論/62-info/(.*) /homepage/newinfopost/$1 [L,R=301]
RewriteRule /homepage/discussions/62-info/$ /homepage/newinfopost/$1 [L,R=301]
RewriteRule ^/?homepage/discussions/62-info/(.*)$ https://samedomain.com/homepage/newinfopost/$1 [L,R=301]
子檔案夾中的 .htaccess(由我的軟體管理以將 URL 轉換為友好的 URL)是這樣的:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /homepage/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(js|css|jpeg|jpg|gif|png|ico|map|webp)(\?|$) /homepage/404error.php [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /homepage/index.php [L]
</IfModule>
但就像我說的那樣,我也嘗試洗掉該檔案并禁用友好 URL。
編輯:
我相信我的頁面是動態的。當它們不是友好的 URL 時,它們看起來像這樣:
https://samedomain.com/homepage/index.php?app=discussions&id=62
測驗 1 基于@MrWhite 的回答:
RewriteRule ^discussions/62-info$ /homepage/newinfopost [R=302,L]
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /homepage/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(js|css|jpeg|jpg|gif|png|ico|map|webp)(\?|$) /homepage/404error.php [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /homepage/index.php [L]
</IfModule>
uj5u.com熱心網友回復:
要重定向/homepage/discussions/62-info
到/homepage/newinfopost
然后,您應該將以下內容添加到檔案的最頂部/homepage/.htaccess
:
RewriteRule ^discussions/62-info$ /homepage/newinfopost [R=302,L]
RewriteRule
模式(第一個引數)匹配相對于包含.htaccess
檔案的目錄的 URL 路徑。因此,這不應包含檔案homepage/
中的 when /homepage/.htaccess
。
請注意,在.htaccess
匹配的 URL 路徑中,不以斜杠開頭。
當/homepage/.htaccess
檔案存在(包含 mod_rewrite 指令)時,父配置(即 in /.htaccess
)中的任何 mod_rewrite 指令都將被完全覆寫 - 它們甚至不被處理(默認情況下)。
始終首先使用 302(臨時)重定向進行測驗,以避免潛在的快取問題。您應該在測驗前清除瀏覽器快取。
RewriteRule homepage/discussions/62-info/(.*) https://samedomain.com/homepage/newinfopost/$1 [L,R=301]
RewriteRule homepage/discussions/62-info/(.*) /homepage/newinfopost/$1 [L,R=301]
RewriteRule /homepage/discussions/62-info/$ /homepage/newinfopost/$1 [L,R=301]
RewriteRule ^/?homepage/discussions/62-info/(.*)$ https://samedomain.com/homepage/newinfopost/$1 [L,R=301]
這些都不匹配示例 URL,因為示例不包含尾部斜杠。第三條規則也有一個錯誤的斜線前綴。(但為什么你有一個捕獲子模式和$1
反向參考?在你的示例 URL 中似乎沒有任何需要“捕獲”的東西?)
它還取決于使用這些指令的位置(和哪個檔案)。
在旁邊:
RewriteBase /home/
在您發布的RewriteBase
指令中,該指令未被使用。但是,它似乎設定不正確,因為基本 URL 似乎是/homepage
,而不是/home
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/493799.html
上一篇:如何使用正則運算式驗證URL