2014-03-24 109 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