整合.htaccess中的冗余rewritecsecond行



我试图在.htaccess中合并多个RewriteCond行,我正在与语法作斗争。以下是我的.htaccess文件重定向区域的代码:

RewriteEngine On
# BEGIN page-level mobile redirects
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(index.html)?$ http://m.example.com [L,R=301]
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^page-1/$ http://m.example.com/p1 [L,R=301]
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^page-2/$ http://m.example.com/p2 [L,R=301]
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^page-3/$ http://m.example.com/p3 [L,R=301]
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^category/page-4/$ http://m.example.com/p4 [L,R=301]
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^category/page-5/$ http://m.example.com/p5 [L,R=301]
</IfModule>
# END mobile redirects

上述解决方案工作正常,但效率低下,因为有很多冗余的ReWriteCond行。我的目标是让一个RewriteCond行应用到我的所有RewriteRule行。这可能吗?

我通常使用REQUEST_URI来更有效地完成这一点,但我无法在这种情况下,因为我们重写请求多个类似的桌面网站与不同的URL布局到一个单一的移动网站文件夹。

阅读Apache文档中的跳过和最后标志。您还可以使用regexp折叠一些行:

# BEGIN page-level mobile redirects
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_USER_AGENT}     !"android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile"
RewriteRule ^                       -                        [skip=3]
RewriteRule ^(index.html)?$         http://m.example.com     [L,R=301]
RewriteRule ^page-([123])/$         http://m.example.com/p$1 [L,R=301]
RewriteRule ^category/page-([45])/$ http://m.example.com/p$1 [L,R=301]
</IfModule>
# END mobile redirects

顺便说一句,从运行时的角度来考虑这是一种误解。是的,每个regexp/规则都会增加10s μS,但是性能方面的真正影响是需要打开和读取.htaccess文件,任何 .htaccess文件。这样做是为了清晰和易于维护性。只要你不因"太聪明"而搬起石头砸自己的脚,规则越少,隐藏错误的机会就越小。

最新更新