我基本上想要
/path/file+name+with+plusses.mp3
重写为
/path/file name with plusses.mp3
在我的情况下,wordpress正在拦截请求并提供404.但文件确实存在。
鉴于mod_rewrite实现中正则表达式的限制,我还没有看到一种直接的方法。
答案 0 :(得分:8)
尝试此规则:
RewriteRule ^([^+]*)\+(.*) $1\ $2 [N]
答案 1 :(得分:1)
嗯,我确实有一个解决方案,但我真的不喜欢它...... 这将用破折号替换所有下划线,并使用301状态代码重定向, 这是'永久移动'。 (当然你也可以用它代替任何其他的字符)
此外,它应该是第一个规则(对于.htaccess文件中的ex),因为第一行实际上是一个循环,它再次遍历所有规则(因为N标志)
RewriteRule ^/redirect/from/([^_]*)\_(.*)$ /redirect/from/thisisthethingwedontneed$1-$2 [N,L]
RewriteCond%{REQUEST_URI}(thisisthethingwedontneed)+
RewriteRule(thisisthethingwedontneed)+(。*)/ url / to / redirect / to / $ 2 [NC,QSA,R = 301]
说明:
'redirect / form':基本路径或您想要重定向的任何内容。它应该包含在第二部分中,以便能够在下一次循环运行时匹配它
第一部分:'替换(不是下划线)后跟下划线后跟(任何)'捕获第一部分和最后一部分供以后使用
第二部分:在捕获的第一部分之前插入一些可能在您的网址中找不到的文字,然后追加第一部分,然后是破折号,然后是第二部分
国旗: N:在此之后,再次继续,再次执行所有重写规则,但使用更改的URL L:如果有比赛,请停在这里(2个标志一起实际上是你想要的第一个。)
下一条规则的条件:只有在请求uri中找到先前定义的字符串时才执行下一条规则,至少一次
第一部分:匹配并捕获任何有趣字符串的出现,并捕获所有内容 之后
第二部分:将第二部分追加到我们想要重定向到的任何路径(并忘记有趣的字符串)
标志: NC:不区分大小写 QSA:附加任何查询字符串 R = 301:永久移动重定向
答案 2 :(得分:0)
我并不完全相信mod_rewrite会为你解决这个问题,因为+
是一个完全合法的查询字符串字符。如果您在网站的根目录中安装了Wordpress,则可能会将该部分网址(PathInfo)视为查询字符串参数。
答案 3 :(得分:0)
我有一个更好的 - 用PHP:
htaccess的:
RewriteCond %{REQUEST_URI} ^/word/[^/]+$
RewriteRule ^word/(.*)$ http://example.com/special_redirect.php?q=$1 [L,QSA,R=301]
./ special_redirect.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" );
?>
这可以应对德语变音符号,但它适用于“_”到“ - ”的简单情况等等......