我试图在.htaccess中合并多个.htaccess行,并在语法上苦苦挣扎。下面是我的.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布局的类似桌面网站重新编写请求到单个移动网站文件夹。
发布于 2014-06-09 04:05:14
阅读Apache文档中的skip和最后一个标志。还可以使用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的.htaccess S,但是性能方面真正的影响是首先需要打开和读取.htaccess文件,任何.htaccess文件。做这类事情是为了清晰和易于维护。只要你不用“太聪明”来打中自己的脚,规则就越少,隐藏错误的可能性就越小。
https://stackoverflow.com/questions/24110697
复制相似问题