簡體   English   中英

遇到一些重定向/重寫代碼的問題.. 301 和 410s

[英]Having trouble with some redirect/rewrite codes .. 301 and 410s

這里是全新的,完全不是編碼員,所以要溫柔。 我在這里的理解水平大約是蹣跚學步的孩子,所以假裝你在和一個 5 歲的孩子說話,我應該能跟上。

我正在切換到新服務器,不再使用 coppermine gallery。 我無法使用舊的 cpg 畫廊和圖像進行重定向。

對於我不會重定向的相冊和類別

(我想在這里重定向的 url 是) http://www.example.com/stock/thumbnails\.php\?album=62

它們消失了,不再存在,我將 410 規則寫為

RewriteRule ^stock/thumbnails\.php\?album=62$ - [R=410, L]

這會破壞新站點並產生 500 錯誤

對於我想重定向到新 url 的舊相冊,例如這個 url http://www.example.com/stock/thumbnails\.php\?album=3

我寫

RewriteRule ^stock/thumbnails\.php\?album=36$ https://www.example.com/gallery/appalachian-trail-photos/ [R=301,L]

但它什么都不做。 網址顯示為 404 頁。 我也嘗試過

Redirect 301 /stock/index.php?cat=2 https://www.example.com/gallery/outdoor-recreation-photos/

這也什么都不做。

我還想將任何圖像顯示頁面重定向到其相關相冊的根圖庫。 因此,來自特定 cpg 相冊的圖像將 go 到新站點上的畫廊頁面。 像這樣的url

http://www.example.com/stock/displayimage.php?album=1&pid=4563#top_display_media

我將重定向寫為

RewriteRule ^stock/displayimage\.php\?album=1&.*$ https://www.example.com/gallery/canadian-wildlife-photos/ [R=301,L]

RewriteRule ^stock/displayimage\.php\?album=32&.*$ - [R=410,L]

將相冊 1 中的任何圖像發送到 CA 野生動物照片相冊,相冊 32 中的任何圖像都消失了。

這些最后都不起作用,但我看不出它們有什么問題?

任何幫助將不勝感激,謝謝。 為我的無知提前道歉。

 RewriteRule ^stock/thumbnails\.php\?album=62$ - [R=410, L] ^--ERROR HERE

flags 參數中的錯誤空格可能是 500 錯誤的原因。 這是一個語法錯誤,所以只是“中斷”。 它應該是[R=410,L] (沒有空格)。 當您指定非 3xx 狀態代碼時, L標志在這里實際上是多余的,因此這與簡單的[R=410]相同,可以進一步簡化為[G] G標志是R=410的簡寫(即“410 Gone”)。

但是, RewriteRule模式(第一個參數)僅匹配 URL 路徑。 這與查詢字符串(第一個?之后的 URL 的部分)不匹配。 要匹配查詢字符串,您需要一個單獨的條件RewriteCond指令)並匹配QUERY_STRING服務器變量(不包括?前綴)。

例如,上面應該寫成這樣:

RewriteCond %{QUERY_STRING} ^album=62$
RewriteRule ^stock/thumbnails\.php$ - [G]

這與 URL /stock/thumbnails.php?album=62完全匹配。 並提供“410 Gone”。 如果有任何其他 URL 參數(在查詢字符串中),則匹配將失敗。 例如。 /stock/thumbnails.php?foo=1&album=62將不匹配。

要匹配查詢字符串中任何位置的 URL 參數album=62 (如果還有其他 URL 參數),然后像這樣調整CondPatternRewriteCond指令的第二個參數):

RewriteCond %{QUERY_STRING} (^|&)album=62(&|$)
:

在 URL 參數之前和之后的附加交替子組(^|&)(&|$)確保我們只匹配確切的 URL 參數而不是fooalbum=62album=623等。

 RewriteRule ^stock/displayimage.php?album=1&.*$ https://www.example.com/gallery/canadian-wildlife-photos/ [R=301,L]

以上幾點應該可以解決此規則的主要問題(匹配查詢字符串)。 但是,您還需要添加QSD標志,以便從重定向響應中刪除原始查詢字符串。 否則,原始查詢字符串(即album=1&.... )將附加到目標 URL 的末尾(例如/gallery/canadian-wildlife-photos/?album=1&... )。

例如:

RewriteCond %{QUERY_STRING} (^|&)album=1(&|$)
RewriteRule ^stock/displayimage\.php$ https://www.example.com/gallery/canadian-wildlife-photos/ [QSD,R=301,L]
 Redirect 301 /stock/index.php?cat=2 https://www.example.com/gallery/outdoor-recreation-photos/

請注意,(mod_alias) Redirect指令也不匹配查詢字符串(僅匹配 URL 路徑)。 要匹配查詢字符串,您需要使用上面提到的 mod_rewrite( RewriteRuleRewriteCond )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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