是否可以使用正则表达式来定位字符串“ - ”?

时间:2016-03-07 10:33:57

标签: regex apache redirect

是否可以在URL中的“ - ”之后定位字符串以重定向到另一个页面?

假设我们有这两个网址:

1. www.domain.com/some/some2/some3/my-page.html
2. www.domain.com/some/some2/some3/my-page--woohoo.html

首先只显示my-page.html的内容。

我需要的是将第二个网址重定向到

www.domain.com/index.php?pagename=$matches[4]&var=$string

所以在这种情况下它将是:

www.domain.com/index.php?pagename=my-page&var=woohoo

有没有想过是否可能?

非常感谢你!

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。我想你正在寻找这样的东西:

模式:

^(.*?)\/.*\/([a-zA-Z-]+)--(.*)\..*$
  • ^在字符串
  • 的开头断言位置
  • (.*?)匹配任何字符(换行符除外)作为捕获组
  • \/匹配字符/字面
  • [a-zA-Z-]+匹配提及的列表a-z, A-Z, -
  • 之间的单个字符
  • --匹配字符 - 字面意思
  • $断言字符串末尾的位置

换人:

$1/index.php?pagename=$2&var=$3

Online Demo

由于您的问题已使用apache标记,因此可以提供帮助:

#With mod_rewrite
RewriteEngine on
RewriteRule  "(.*?)\/.*\/([a-zA-Z-]+)--(.*)\..*$"  "$1/index.php?pagename=$2&var=$3"  [R,L]

#With RedirectMatch
RedirectMatch "(.*?)\/.*\/([a-zA-Z-]+)--(.*)\..*$" "$1/index.php?pagename=$2&var=$3"

答案 1 :(得分:1)

您可以在server.config或htaccess中使用以下规则:

RewriteEngine on


RewriteCond %{THE_REQUEST} /([^/]+)--([^.]+)\.html [NC]
RewriteRule ^ /index.php?pagename=%1&var=%2 [NC,L,R]

这将重定向:

  • /some/some1/some2/my-page--woohoo.html

  • /index.php?pagename=my-page&var=woohoo