2016-10-01 100 views
1

我更新了一个网站到一个新的系统,现在我们有很多重定向来处理。.htaccess重定向 - 通配符和/或语法

其中许多属于相同的一般模式 - 以.html或.php结尾的旧链接,以及URL中的某些关键字(产品名称)。

而不是写一个明确的重定向为每个个案(已多达1500个以上,并且还在不断增加),我想在那里与一个AND/OR语句来处理它们的方式。

例如:

如果旧的URL中包含 “SKU12345” AND “html的”,它应该被重定向到/产品/ SKUGROUP1/SKU12345。

这样一来,旧的URL是否看起来像

“/products/oldsubcategory/something/cool-widget-SKU12345.html”
OR
“/某事/真的,老版本 - SKU-12345.html“

它应该重定向到相同的新页面。

换句话说,我要赶包含一个具体的产品型号/ SKU /关键字,扩展的.html或.PHP任何链接,并将其重定向到新的URL(其不具有结尾)。

我不能只说“如果旧的URL包含此SKU /关键字”,因为新的网址,还包含SKU /关键字,并且会导致重定向循环。它必须特别包含.html/.php。

这可能吗?如果是这样,任何人都可以告诉我正确的语法?

谢谢!

+0

这可能是使用您使用2.4或以上的https: //blogs.apache.org/httpd/entry/new_in_httpd_2_4 – Kitson88

+0

这是一个很好的指针,但遗憾的是: 1)我不熟悉的httpd :( 2)这里只有1例,这是一个非-www o www重定向。 3)我似乎无法找到任何实际上利用if/else/elseif函数的“htaccess生成器”:( ...总体来说,就像我以前一样无能为力)。 – TomJones999

回答

0

您可以使用此重定向规则根的.htaccess匹配两种情况:

RewriteEngine On 

RewriteRule (^|[/-])AA99SKU1-?(\d*)\.(?:html?|php)$ /products/SKUGROUP1/AA99SKU1$2 [L,NC,R=301] 

这将匹配两种情况:

"/products/oldsubcategory/something/cool-widget-SKU12345.html" 
OR 
"/something/really-old-version-of-SKU-12345.html" 
如果
+0

anubhava:谢谢如果你有一种方法可以使它与.html或.php相匹配吗? – TomJones999

+0

不是,实际上并没有工作,但仍然没有找到“页面未找到”页面 – TomJones999

+0

确保这是你的第一条规则,也告诉你用什么URL测试。 – anubhava