Regex .htaccess重定向-通配符和/或语法

Regex .htaccess重定向-通配符和/或语法,regex,apache,.htaccess,redirect,Regex,Apache,.htaccess,Redirect,我更新了一个网站到一个新的系统,现在我们有一吨重定向处理 它们中的许多都属于相同的一般模式——旧链接以.html或.php结尾,URL中有某些关键字(产品名称) 我想有一种方法可以用and/OR语句来处理它们,而不是为每个案例编写一个明确的重定向(已经达到1500多个,并且还在增长) 例如: 如果旧URL包含“SKU12345”和“.html”,则应将其重定向到/products/SKUGROUP1/SKU12345 这样,无论旧URL看起来像 “/products/oldsubcategory

我更新了一个网站到一个新的系统,现在我们有一吨重定向处理

它们中的许多都属于相同的一般模式——旧链接以.html或.php结尾,URL中有某些关键字(产品名称)

我想有一种方法可以用and/OR语句来处理它们,而不是为每个案例编写一个明确的重定向(已经达到1500多个,并且还在增长)

例如:

如果旧URL包含“SKU12345”和“.html”,则应将其重定向到/products/SKUGROUP1/SKU12345

这样,无论旧URL看起来像

“/products/oldsubcategory/something/cool-widget-SKU12345.html”

“/something/really-old-version-of-SKU-12345.html”

它应该重定向到同一个新页面

换句话说,我想捕获任何包含特定产品型号/SKU/关键字、和扩展名.html或.php的链接,并将它们重定向到新的URL(没有结尾)

我不能只说“如果旧URL包含此SKU/关键字”,因为新URL也包含SKU/关键字,这将导致重定向循环。它必须特别包含.html/.php

这可能吗?如果是的话,有人能告诉我正确的语法吗


谢谢

您可以在root.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"
这将匹配两种情况:

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"

您可以在root.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"
这将匹配两种情况:

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"

如果您使用2.4或更高版本,这可能有用,这是一个很好的指针,但不幸的是:1.)我不熟悉httpd:(2.)只有一个示例,它是一个非www到www的重定向。3.)我似乎找不到任何真正使用if/else/elseif函数的“htaccess生成器”:(总体来说,就像我之前一样,毫无头绪。如果您使用2.4或更高版本,这可能有用,这是一个很好的指针,但不幸的是:1.)我不熟悉httpd:(2.)只有一个示例,它是一个非www到www的重定向。3.)我似乎找不到任何真正使用if/else/elseif函数的“htaccess生成器”:(总体而言,就像我之前一样无知。阿努巴瓦:谢谢,这将大大有助于清理混乱。有没有办法使它匹配.html或.php?没有,实际上没有工作。仍然得到“未找到页面”页面。确保这是您的第一条规则,并告诉您在测试中使用了什么URL。是的,我将它放在.htaccess文件的开头。RewriteEngine位于RewriteRule-AA99SKU1-?(\d+)\(?:html?| php)$/products/SKUGROUP1/AA99SKU1$1[L,NC,R=301]也就是说,旧的URL是www.mysite.com/products/AA99SKU1.php,新的URL是/products/SKUGROUP1/AA99SKU1(无扩展名),非常接近。唯一剩下的是,生成的URL在末尾有一个额外的破折号。它应该以“AA99SKU1”结尾,但它以“AA99SKU1-”结尾阿努巴瓦:谢谢,这将大大有助于清理混乱。有没有办法让它与.html或.php匹配?没有,实际上不起作用。仍然得到“未找到页面”页面。确保这是您的第一条规则,并告诉您在测试中使用了什么URL。是的,我将它放在.htaccess文件的开头。RewriteEngine位于RewriteRule-AA99SKU1-?(\d+)\(?:html?| php)$/products/SKUGROUP1/AA99SKU1$1[L,NC,R=301]也就是说,旧的URL是www.mysite.com/products/AA99SKU1.php,新的URL是/products/SKUGROUP1/AA99SKU1(无扩展名),非常接近。唯一剩下的是结果URL的末尾有一个额外的破折号。它应该以“AA99SKU1”结尾,但它以“AA99SKU1-”结尾。