使用 htaccess 進行重定向,使用斜線、底線或日期作為分隔符號 - 友善的 url
P粉717595985
P粉717595985 2023-09-11 12:11:18
0
1
512

這工作正常:

https://example.com/2023/not-the-dinner-day

使用以下RewiteRule

RewriteRule ^(\d{4})/not-the-dinner-day/?$ archive/reports//ntdd.php [NC,L]

我想取得這個新網址:

https://example.com/2023/not-the-dinner-day-photographs

來自這個舊網址

https://example.com/archive/galleries/2023/20230204_ntdd/

我嘗試過各種方法,包括:

RewriteEngine On
RewriteRule ^(\d{4})/not-the-dinner-day-photographs/?$ archive/galleries//_ntdd/ [NC,L]

匹配最後一個資料夾20230204_ntdd似乎給我帶來了問題,重寫模組已開啟。

P粉717595985
P粉717595985

全部回覆(1)
P粉180844619

由於請求的 URL 中不存在 0204 (MMDD) 部分,因此您需要對其進行硬編碼。幸運的是,任何一年只有一個 MMDD。

如果您有權存取伺服器配置,那麼您可以實作一個包含一對一映射的 RewriteMap - 然後可以在 .htaccess 中找到該映射.

否則,您可以在 .htaccess 中執行類似以下操作:

RewriteCond -0202 2019-(\d{4}) [OR]
RewriteCond -0201 2020-(\d{4}) [OR]
RewriteCond -0206 2021-(\d{4}) [OR]
RewriteCond -0205 2022-(\d{4}) [OR]
RewriteCond -0204 2023-(\d{4})
RewriteRule ^(\d{4})/not-the-dinner-day-photographs/?$ archive/galleries//%1_ntdd/index.php [NC,L]

前面的條件包含 YYYY 到 MMDD 的一對一映射。 $1 是從RewriteRule pattern 捕獲的4 位數字年份,然後CondPattern 從TestString


#它是使用產生的替換字串中的

%1 反向引用檢索的。

旁白:
  1. 但是,您的原始規則存在一些潛在的 SEO 問題:

  2. 您允許在請求的 URL 上使用可選的尾部斜線。但兩者都會傳回相同的資源。這些是嚴格意義上的兩個不同的 URL,並且可能會產生
  3. 重複內容

    問題。如果有可能同時收到兩個 URL(有或沒有尾部斜線),那麼理想情況下您應該從一個 URL 重定向到另一個 URL(無論規範如何)。
    您允許不區分大小寫的匹配。同樣,這可能會導致重複內容

    問題。如果您確實有混合大小寫的請求,那麼您應該使用外部重定向來規範/更正請求。請參閱以下內容:
  4. 如何在 .htaccess 中將 URL 從大寫重寫為小寫

###如果您要更改現有的URL 結構(已被第三方索引和/或連結),那麼您需要在另一個指令中實現外部301 重定向,從舊到新,以便以保護搜索引擎優化。 ### ### ###
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板