【发布时间】:2011-03-07 10:13:36
【问题描述】:
我从各种来源收集了这些规则,你们有没有发现任何陷阱?
我正在使用它来设置 ZendFramework 支持的网站的移动版本。
# You ofcourse need this to start the magic, and mod_rewrite enabled ;)
RewriteEngine On
# iOS redirection.
# Make sure the URL hasn't already been rewritten internally
RewriteCond %{ENV:REDIRECT_STATUS} =""
# Make sure we don't redirect links from mobile to default (web) back to mobile
RewriteCond %{HTTP_REFERER} !domain\.com
RewriteCond %{REQUEST_URI} !^/m
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-s
# Don't use this Cond if you want direct requests on 'domain.tld' go to mobile
# RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteCond %{HTTP_USER_AGENT} .*Mobile.*Safari
RewriteRule ^(.*)$ /m/$1 [R,L]
# ZendFramework redirection
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteRule ^.*$ index.php [NC,L]
我不是 mod_rewrite 专家,那么 [R,L] 和 [NC,L] 是什么意思?
更新
刚刚在 iPad 上进行了测试,但它并没有在其中重定向。但同样,我猜 iPad 不需要移动版本。你怎么看?
更新更新
嗯.. 刚刚意识到从 iPhone 直接访问 http://www.domain.com/ 是行不通的,但它确实有效。在查询中添加诸如http://www.domain.com/tracker 之类的内容会正确重定向到http://www.domain.com/m/tracker - 所以也许这就是iPad 没有显示移动网站的原因(而且我现在手头没有iPad)。
第三次更新
在直接访问http://www.domain.com/ 时,移动网站未显示的问题再次解决。 RewriteCond %{REQUEST_FILENAME} !-d 是问题所在。
【问题讨论】:
-
[NC] 代表无大小写,不区分大小写。 [L] 代表 Last,不再处理任何规则。 [R] 代表重定向,强制实际重定向回浏览器。 httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteRule
标签: apache zend-framework mod-rewrite