2017-01-23 24 views
3

我有一個客戶端的新網站完成,現在我正在做所有的重定向.htaccess文件。對於下面的代碼段中的源URL部分,我有點困惑。 這兩條線是一樣的嗎?這兩個重定向在.htaccess和這兩個如何編寫單個重定向之間有什麼區別

Redirect 301 /shop/contact-us http://www.example.com/contact-us/ 
Redirect 301 /shop/contact-us/ http://www.example.com/contact-us/ 
+2

區別顯然是斜線。即使路徑不同,只有尾部的斜線纔會有所不同。但是在兩種情況下,指令都以相同的方式應用。 –

+0

@RuslanOsmanov如何將這兩個網址重定向到http://www.example.com/contact-us/使用.htaccess中的重定向 –

+1

'RedirectMatch 301「^/shop /(contact-us)/?」 HTTP:// www.example.com/$ 1 /'。 '重定向'不是很合適。請更新問題。否則,目前還不清楚你在詢問什麼。 –

回答

1

如果您想將/shop/contact-us與若干可選尾隨斜槓重定向到http://www.example.com/contact-us,那麼Redirect指令不是很合適。使用RedirectMatch指令代替:

RedirectMatch 301 "^/shop/(contact\-us)/?" http://www.example.com/$1/ 

其中

  • ^是錨意爲 「行首」;
  • /?匹配零或一個斜線字符;
  • (contact\-us)是捕獲組(由$1引用)

注意,正則表達式唯一前綴相匹配,因爲僅使用^錨。可以使用錨的$(線結束),以使表達更嚴格,例如:

RedirectMatch 301 "^/shop/(contact\-us)/*$" http://www.example.com/$1/ 

其中/*意味着零條或多個斜線。

+0

那麼這個重定向/ shop/contact-us&/ shop/contact-us /還是會重定向/購買/聯繫我們/ ABC? –

+0

@Keyur,它會重定向這兩個。如果你只想要第一個,使用'''錨點,例如'RedirectMatch 301「^/shop /(contact \ -us)/ * $」http:// www.example.com/$ 1 /',其中'/ *表示0或更多斜線 –

+0

好的謝謝@RuslanOsmanov –

-1

您列出的源網址是唯一且不同的,因爲其中有一個結尾的斜槓。

實際上訂單可以與mod別名有關係。

如果我們有以下幾點:

Redirect 302 '/foo/' 'http://example.com/foo.php' 
Redirect 302 '/foo' 'http://example.com/bar.php' 

還可以訪問/foo/,我們會得到一個臨時重定向到http://example.com/foo.php。 如果我們訪問/foo,我們會暫時重定向到http://example.com/bar.php

但如果我們改變這個順序:

Redirect 302 '/foo' 'http://example.com/bar.php' 
Redirect 302 '/foo/' 'http://example.com/foo.php' 

還可以訪問/foo/,奇怪的是,第一圖案/foo將匹配,你會在http://example.com/bar.php結束了!

我傾向於寫更具體的(更長的來源網址首先)。

有時我會使用mod別名重定向獲得一些非常奇怪的結果。因此,最終使用RedirectMatch編寫特定的模式匹配,或者使用mod重寫。

你的情況看來,如果你希望兩個:

/shop/contact-us 

/shop/contact-us/ 

重定向到相同的URL。所以,你可以簡單地忽略一個規則,只是使用:

Redirect 301 /shop/contact-us http://www.example.com/contact-us/ 

但是,也許在歷史上已使用這兩種模式來訪問相同或不同的資源,所以它可能是更好的同時列出(但更改順序)。