.htaccess重定向的正则表达式

时间:2013-01-06 09:08:20

标签: regex .htaccess redirect

我在我的网站上编辑了所有网址,示例是下面的一个(它不必在calipers目录下)(下划线的数量也是不恒定)

  

的.com /卡尺/ Insize_1108_1_2

  

的.com /卡尺/ 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]

1 个答案:

答案 0 :(得分:0)

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+))并将其余数字直到开始(使用(.*))。