簡體   English   中英

Apache .htacess - 301 重定向根本不起作用。 使用動態和友好的 URL

[英]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 代碼。

一些相關信息:

  • 這兩個頁面都是由我的軟件從數據庫中提取的,該軟件安裝在主頁子文件夾中
  • 這兩個頁面都是友好的 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>

要將/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM