我是mod_rewrite的新手,我正在尝试从
转换网址http://example.com/foo/bar/blah/etc.html
到
http://example.com/stuff/foo_bar_blah_etc.html
假设域和文件名之间没有一定数量的目录,因此我不能只用3个占位符编写单个重写规则。我可以想象创建5到6个规则,零到5个占位符但我觉得有更好的方法。有人可以帮帮我吗?
答案 0 :(得分:4)
我认为你可以用一个下划线一次替换一个斜杠:
RewriteRule ^/(.+)/(.*?)$ /$1_$2 [N]
RewriteRule ^.*$ /stuff$0
[N]
标志导致Apache从第一个规则重新启动URL重写过程。如果您在这两个规则之前有其他适用于URL的规则,请记住它们也会在每次迭代时调用。
可能会或可能不会更有效的替代方案是使用外部程序来处理重写。你将它放在你的Apache配置文件中(而不是上面的)
RewriteMap slashtouscore prg:/usr/local/bin/slashtouscore.pl
RewriteRule ^/(.*)$ /stuff${slashtouscore:$1}
然后您需要使用内容
创建可执行脚本/usr/local/bin/slashtouscore.pl
#!/usr/bin/perl
$| = 1;
while (<>) {
s|/|_|g;
print;
}
(它不一定是Perl脚本,当然,任何具有相同功能的程序都可以 - 当然文件名可以是你想要的任何东西,只要它可以被Apache访问)
请注意,这些都没有经过测试。
答案 1 :(得分:1)
试试这个:
RewriteRule (.*)/(.+) $1_$2 [NS]
RewriteRule (.*) stuff/$1 [NS]