2014-03-24 114 views
0

我們遇到了使用.htaccess在apache服務器上重寫URL的問題。URL重寫問題

目標:在保留通用重定向的同時,刪除其類別&子類別的以下URL。

測試1:

Redirect 301 /category/subcategory/product http://www.site.com/product

重定向完美的作品。單個重定向到所需的頁面。

測試2:

RedirectMatch 301 ^/category/subcategory/.*$ http://www.site.com/category/subcategory

重定向對自己的作品非常的所需的所有URL。

問題是,當我們有一個乾淨的.htaccess文件中的兩個URL,並且重定向按正確的順序(特定的第一個,然後一般),正在使用的一般重定向。

測試3:

Redirect 301 /category/subcategory/product http://www.site.com/product

RedirectMatch 301 ^/category/subcategory/.*$ http://www.site.com/category/subcategory

當我們參觀www.site.com/category/subcategory/product,結果是www.site.com/category/subcategory/product這不是理想的結果。相反,我們想要的網址被www.site.com/category/subcategory/product,

我們甚至試圖修改重定向到: Redirect 301 /category/subcategory/product http://www.site.com/product [L] 它沒有什麼區別。

請幫忙!

編輯:添加2014年3月25日

我們正在試圖做的是新產品的頁面提供了一組已知產品的具體重定向從他們的老產品頁面。我們還試圖將其他未知產品的「全部」重定向添加到類別頁面。

下面是一個實際的例子重定向其工作原理:

Redirect 301 /womens/western-dresses/stetson-cream-empire-waist-ls-western-dress http://www.site.com/stetson-cream-empire-waist-ls-western-dress

如果上面的重定向被添加到.htaccess文件,它完美對自己。

這是第二個例子重定向其工作原理:

RedirectMatch 301 ^/womens/western-dresses/.*$ http://www.site.com/womens/western-dresses

的問題是,如果我們在.htaccess既有的規則一起,在與上述順序相同,第二條規則總是觸發。我們嘗試訪問www.site.com/womens/western-dresses/stetson-cream-empire-waist-ls-western-dress,結果是www.site.com/womens/western-dresses而不是所期望的結果www.site。COM /斯泰森-奶油高腰-LS-西式禮服

爲清楚:

  • 若能去除.htaccess文件,網址404

  • 如果只有第一條規則上市之後,它觸發完美

  • 如果只有第二條規則上市之後,第二條規則觸發完美

  • 如果機器人h規則列出,第二個規則觸發。

  • 我們刪除了.htaccess文件中的所有重定向。唯一的重定向是以下兩行。問題仍然是第一次重定向被忽略的地方。我們嘗試將第一次重定向的開始更改爲^ /女性和^女性,但該更改沒有效果。

Redirect 301 /womens/western-dresses/stetson-cream-empire-waist-ls-western-dress http://www.site.com/stetson-cream-empire-waist-ls-western-dress

RedirectMatch 301 ^/womens/western-dresses/.*$ http://www.site.com/womens/western-dresses

回答

0

您的文章是有點混亂,所以我可能會誤解你正在嘗試做的。

如果使用內存服務,則在.htaccess文件中使用這些指令時,不應在模式中包含前導斜槓。該用途保留給httpd.conf。當在.htaccess文件中使用這些指令時,前導路徑組件已被mod_access刪除。我猜這是你麻煩的原因。

例如,這應該工作(未測試):

Redirect  301 ^category/subcategory/product http://www.site.com/product 
RedirectMatch 301 ^category/subcategory/.*  http://www.site.com/category/subcategory 

順便說一句,[L]是mod_rewrite的隱語。 「重定向」和「RedirectMatch」是mod_access的一部分。

編輯3/25:在.htaccess文件中使用時,特別是不存在的文件夾和混合指令打交道時

重定向和RedirectMatch可挑剔。我可以建議你直接移動到mod_rewrite嗎?雖然它有一個陡峭的學習曲線,但一旦掌握了它,你將永遠不會回頭。

# Assuming you are in a .htaccess under DocumentRoot: 
RewriteEngine On 
RewriteRule ^category/subcategory/product1\.html$ /product1.html [R=301,L] 
RewriteRule ^category/subcategory/product2\.html$ /product2.html [R=301,L] 
RewriteRule ^category/subcategory/.*    /category/subcategory [R=301,L] 

順便說一句,這看起來像一個很好的候選人RewriteMap,雖然你將需要聲明的地圖將在httpd.conf

+0

嗨codnodder - 謝謝你的迴應!我收到了更多的解釋,以上添加。 – Jenni

+0

使用mod_rewrite更新了答案。如果你的路徑不同,我們需要用RewriteBase等進行一些調整。 – codnodder