【问题标题】:Regular expression for .htaccess redirect.htaccess 重定向的正则表达式
【发布时间】:2013-01-06 09:08:20
【问题描述】:

我在我的网站中编辑了 所有 url,一个 example 是下面的一个(它不必在 calipers 目录下)(下划线的数量也是不固定)

.com/Calipers/Insize_1108_1_2

.com/Calipers/Insize-1108-1-2

所以网址中只更改了 1 个字符,我应该如何修改我的 .htaccess ?

目前我的 htaccess 不包含除了我的 cms 默认设置以外的任何内容,如下所示。

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

编辑:这是我尝试过的,但没有成功。

RewriteRule ^([^/]+)[_]([^/]+)$ $1-$2 [R=301,L]

【问题讨论】:

  • ¿您的 .htaccess 文件现在怎么样了?了解正在修改的内容会有所帮助。
  • @bukfixart 我正在努力学习正则表达式,但一开始需要一些经验才能正确编写它,所以我正在寻求帮助。
  • @FelipeAlamedaA 我已经编辑了问题
  • 我认为你的重写规则应该是这样的RewriteRule ^_([^_]+)_([^_]+)_([^_]+)$ Calipers/Insize-$1-$2-$3 [R=301,L]。我只是修改了正则表达式,但没有测试它。
  • @FelipeAlamedaA,下划线的个数不知道,还有目录。

标签: regex .htaccess redirect


【解决方案1】:
RedirectMatch 301 (/Calipers/Insize)_(\d+)_(\d+)_(\d+)$ $1-$2-$3-$4

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

尚未测试,

也可以在这里查看:htaccess regex directory to variable

编辑

您的正则表达式 ^([^/]+)[_]([^/]+)$ 与您的网址“.com/Calipers/Insize_1108_1_2”不匹配

使用^ 标记字符串的开头。最好是从头看,不要摸头。

这会导致

RewriteRule ^(.*)_(\d+)_(\d+)_(\d+)$ $1-$2-$3-$4 [R=301,L]

与我的第一个解决方案没有太大不同。

它将最后的三个数字组合在一起(每个数字都有(\d+)),其余的直到开始((.*))。

【讨论】:

  • 请检查我添加到问题中的最后一个编辑部分,我正在尝试创建批量重定向正则表达式。
  • @bukfixart 我认为参考 1 指向错误的组:(/Calipers/Insize)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 2011-08-30
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
相关资源
最近更新 更多