[英]Apache .htacess - 301 redirect doesn't work at all. Using dynamic and friendly URL
我一直在嘗試創建從主頁子文件夾中的頁面到同一子文件夾中的另一個頁面的 301 重定向。 例子:
(1) samedomain.com/homepage/discussions/62-info到(2) samedomain.com/homepage/newinfopost
但是,它根本不起作用,我已經嘗試了很多 RewriteRule 代碼。
一些相關信息:
我試過的:
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>
要將/homepage/discussions/62-info
重定向到/homepage/newinfopost
,那么您應該將以下內容添加到/homepage/.htaccess
文件的最頂部:
RewriteRule ^discussions/62-info$ /homepage/newinfopost [R=302,L]
RewriteRule
模式(第一個參數)匹配相對於包含.htaccess
文件的目錄的 URL 路徑。 因此,在/homepage/.htaccess
文件中不應包含homepage/
。
請注意,在.htaccess
中,匹配的 URL 路徑不以斜杠開頭。
當/homepage/.htaccess
文件存在(包含 mod_rewrite 指令)時,父配置中的任何 mod_rewrite 指令(即在/.htaccess
中)都將被完全覆蓋 - 它們甚至不被處理(默認情況下)。
始終首先使用 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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.