Sch*_*man 8 php .htaccess mod-rewrite redirect
我想将包含下划线的任何请求重定向到相同的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]
Run Code Online (Sandbox Code Playgroud)
我目前在php中的解决方案是(工作正常):
if(preg_match('/[_]+/', $_SERVER['REQUEST_URI'])){
$redirectUrl = preg_replace('/[_]+/','-', $_SERVER['REQUEST_URI']);
header('Location: '. $redirectUrl , TRUE, 301);
return;
}
Run Code Online (Sandbox Code Playgroud)
但是,我宁愿不使用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>
Run Code Online (Sandbox Code Playgroud)
请参阅“Next”指令/重写标志,这会导致从第一条规则开始重新评估规则集:http://httpd.apache.org/docs/current/rewrite/flags.html#flag_n
像这样的事情可能会起作用:
RewriteRule (.*)_(.*) $1-$2 [N]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3226 次 |
| 最近记录: |