首頁  >  問答  >  主體

使用 htaccess 進行重定向,使用斜線、底線或日期作為分隔符號 - 友善的 url

這工作正常:

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粉717595985P粉717595985377 天前449

全部回覆(1)我來回復

  • P粉180844619

    P粉1808446192023-09-12 00:18:54

    由於請求的 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 從< em>TestString


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

    %1 反向引用檢索的。

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

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

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

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

    ###如果您要更改現有的URL 結構(已被第三方索引和/或連結),那麼您需要在另一個指令中實現外部301 重定向,從舊到新,以便以保護搜索引擎優化。 ### ### ###

    回覆
    0
  • 取消回覆