代码之家  ›  专栏  ›  技术社区  ›  Paul Irish

在apache htaccess中搜索并替换重写规则

  •  7
  • Paul Irish  · 技术社区  · 17 年前

    我基本上想得到

    /path/file+name+with+plusses.mp3

    重写为

    /path/file name with plusses.mp3

    考虑到mod_rewrite实现中正则表达式的约束,我还没有看到一种直接的方法。

    4 回复  |  直到 17 年前
        1
  •  8
  •   Gumbo    17 年前

    试试这个规则:

    RewriteRule ^([^+]*)\+(.*) $1\ $2 [N]
    
        2
  •  1
  •   Rau    16 年前

    好吧,我确实有一个解决方案,但我真的不喜欢它。。。 这将用破折号替换所有下划线,并用301状态码重定向, 这是“永久移动”。(当然,您也可以使用它来替换任何其他字符)

    此外,它应该是第一条规则(对于.htaccess文件中的ex),因为第一行实际上是一个循环,它再次遍历所有规则(因为N标志)

    RewriteRule ^/redirect/from/([^_]*)\_(.*)$ /redirect/from/thisisthethingwedontneed$1-$2 [N,L]
    

    重写密码%{REQUEST_URI}(这是需要的内容)+

    重写规则(这是已完成的内容)+(.*)/url/to/redirect/to/$2[NC,QSA,R=301]

    说明:

    第一行:

    'redirect/form':基本路径或您要重定向的任何路径。它应该包含在第二部分中,以便能够在循环的下一次运行中与之匹配

    第一部分:'替换(不是下划线),后跟下划线,后跟(任何东西)'捕获第一部分和最后一部分以供以后使用

    旗帜: N:在此之后,再次执行,再次执行所有重写规则,但使用更改的url L:如果有比赛,就停在这里(这两面旗帜实际上构成了你对第一面旗帜的期望。)

    第二行

    三线

    第一部分:匹配并捕捉有趣字符串的任何出现,并捕捉一切 之后

    第二部分:将第二部分附加到我们想要重定向到的任何路径上(忘记有趣的字符串)

    旗帜: NC:不区分大小写 QSA:附加任何查询字符串 R=301:重定向并永久移动

        3
  •  0
  •   Jordan S. Jones    17 年前

    我并不完全相信mod_rewrite能为你解决这个问题 + 是一个完全合法的查询字符串字符。如果您在网站的根目录中安装了Wordpress,它可能会将url(PathInfo)的这部分视为查询字符串参数。

        4
  •  0
  •   sth    16 年前

    我有一个更好的PHP:

    .htaccess:

      RewriteCond %{REQUEST_URI} ^/word/[^/]+$
      RewriteRule ^word/(.*)$  http://example.com/special_redirect.php?q=$1 [L,QSA,R=301]
    

    ./special_direct.php

    <?php
    
    $q = $_GET['q'];
    $new = strtolower(convert_character($q));
    
    //echo "$q | $new";
    $location = "http://" . $new . ".example.com/";
    //echo $location;
    
    function convert_character($name) {
      $patterns_raw     = array('Ä',  'ä',  'Ö',  'ö',  'Ü',  'ü', 'ß');
      foreach ($patterns_raw as $pattern_raw) {
        $patterns[] = '/' . $pattern_raw . '/u';
      }
    
      $replacements = array('ae', 'ae', 'oe', 'oe', 'ue', 'ue', 'ss');
      $new_name = preg_replace($patterns, $replacements, $name);
    
      return $new_name;
    }
    
    
    Header( "HTTP/1.1 301 Moved Permanently" );
    Header( "Location: $location" );
    
    ?>
    

    以上内容适用于德语变音字符,但也适用于“_”到“-”等更简单的情况。。。

    推荐文章