【问题标题】:Set redirect in .htaccess if url has a suffix and can have an end如果 url 有后缀并且可以有结尾,则在 .htaccess 中设置重定向
【发布时间】:2015-05-24 13:09:51
【问题描述】:

在我的客户类别页面的 Virtuemart 网站上有如下网址:

example.com/vm-search/level1category-cityname/level2category-cityname
or
example.com/vm-search/level1category-cityname/level2category-cityname/level3category-cityname
or
example.com/vm-search/.../-cityname/result,9-10 (digits may be any numbers from 1 to N)

我需要一个 .htaccess 的重定向规则,它将即时删除除最后一个城市之外的所有城市名称,如果它是 url 的结尾,则还保留 result,9-10,即结果必须如下:

example.com/vm-search/level1category/level2category-cityname
or
example.com/vm-search/level1category/level2category/level3category-cityname
or
example.com/vm-search/level1category/level2category-cityname/result,9-10 (digits may be any numbers from 1 to N)
or
example.com/vm-search/level1category/level2category/level3category-cityname/result,9-10 (digits may be any numbers from 1 to N)

请不要将问题视为stackoverflow.com/q/30298289/3208225的重复,因为它有其他条件

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite redirect


    【解决方案1】:

    您可以在 root .htaccess 中使用此规则

    RewriteRule ^(vm-search)/(?:([^-]+)-[^/]+/)+?([^/-]+-(?=[a-z])[^/]+(?:/.*)?)$ /$1/$2/$3 [L,NC,R=302]
    

    编辑:如果您想避免多次重定向,请使用 env 变量,如下所示:

    RewriteRule ^(vm-search)/(?:([^-]+)-[^/]+/)+?([^/-]+-(?=[a-z])[^/]+(?:/.*)?)$ /$1/$2/$3 [NC,L,E=IS_REDIR:1]
    
    RewriteCond %{ENV:REDIRECT_IS_REDIR} =1
    RewriteRule . %{REQUEST_URI} [L,R=302]
    

    【讨论】:

      【解决方案2】:

      您可以使用以下正则表达式匹配并替换为空(空字符串):

      -cityname(?=.*cityname)
      

      类似于以下内容(检查语法):

      Rewrite -cityname(?=.*cityname) [L,NC,R=302]
      

      如果您想使用通用关键字.. 使用以下内容:

      -([^\/\s]+)(?=.*-\1)
      

      【讨论】:

      • 我相信cityname这里不是静态文本。
      • 如果使用 Rewrite -cityname(?=.*cityname) [L,NC,R=302]Rewrite -([^\/\s]+)(?=.*-\1) [L,NC,R=302] 我得到 500 Internal Server Error
      • 我对 htaccess 语法一无所知.. regex 工作正常.. 也许@anubhava 可以帮助语法?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多