【发布时间】:2011-11-30 19:42:52
【问题描述】:
我想将包含下划线的任何请求重定向到相同的 url,但用连字符替换 url。我看到很多论坛建议我这样做:
(重复这个 rewriteRule 的一个递增版本,直到一个 gazillion)
rewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ http://example.com/$1-$2-$3-$4 [R=301,L]
rewriteRule ^([^_]*)_([^_]*)_(.*)$ http://example.com/$1-$2-$3 [R=301,L]
rewriteRule ^([^_]*)_(.*)$ http://example.com/$1-$2 [R=301,L]
我目前在 php 中的解决方案是(效果很好):
if(preg_match('/[_]+/', $_SERVER['REQUEST_URI'])){
$redirectUrl = preg_replace('/[_]+/','-', $_SERVER['REQUEST_URI']);
header('Location: '. $redirectUrl , TRUE, 301);
return;
}
但是,我宁愿不使用 php,而是将其保存在我的 htaccess 文件中,而不必一遍又一遍地重复第一个 rewriteRule 以预测每个 url 可能有多少下划线。想法?有没有这样的方法可以在不重复递增的 rewriteRule 的情况下做到这一点?
----- 编辑 -----
我当前的 htaccess 文件只是标准的 WordPress 文件,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
【问题讨论】:
-
这是我看到它工作的唯一方式,你没有在 mod rewrite 中替换,只有用匹配的模式重写规则。
标签: php .htaccess mod-rewrite redirect