htaccess如果在移动设备上,将特定文件重定向到同一文件夹中的其他文件

时间:2014-07-05 21:06:06

标签: regex apache .htaccess mod-rewrite redirect

我有一个由其他网站托管的网站作为子域名。我试图让它适合移动设备。到目前为止,我已正确地重定向到该网站的移动版本(目前仅与Galaxy S3手机分辨率兼容),即index_m.php而不是index.php。我有替代的php页面文件,用于移动版本的网站美学部分(菜单栏,徽标,页脚等)。但是,当我更新时我只想改变一组文件(实际网站内容)而不是两个。这在很大程度上起作用,因为我有一个备用菜单栏php,用户将用户发送到适当的移动页面。问题是,链接到网站各个部分的更新和突出显示等页面部分正在使用指向桌面格式页面的链接。

这是我目前的htaccess内容。如何为特定文件添加另一组条件? (特别是games.php / games_m.php和history.php / history_m.php)在同一个文件夹中?

Options +FollowSymLinks
RewriteEngine on

# if the browser accepts these mime-types, it's definitely mobile, or pretending to be
RewriteCond %{HTTP_ACCEPT} "text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml" [NC,OR]

# a bunch of user agent tests
RewriteCond %{HTTP_USER_AGENT} "sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone"[NC]
RewriteCond %{HTTP_USER_AGENT} "android|googlebot-mobile|iemobile|ipod|#opera mobile|palmos|webos" [NC]

RewriteRule ^$ http://sc55.duke4.net/index_m.php [R=302]

我知道传统上会为移动页面使用完全替代的子域或子文件夹,但正如我所说,我只希望一次更新一组文件。我无法访问任何数据库系统或两个网站的任何内容来从中提取数据。

1 个答案:

答案 0 :(得分:1)

正如您可能意识到的那样,问题是一组条件仅适用于一个规则。如何添加遵循相同条件的规则?一种解决方案是重复这些条件,但这太重了。

更有效的解决方案是使用if-then-else逻辑:否定条件,然后保持文件不变并跳过以下规则,因此在满足条件时适用。这看起来像这样:

# Do we meet NONE of the conditions?
RewriteCond %{HTTP_ACCEPT} !(text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml) [NC]
RewriteCond %{HTTP_USER_AGENT} !(sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera) [NC]
RewriteCond %{HTTP_USER_AGENT} !(mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox) [NC]
RewriteCond %{HTTP_USER_AGENT} !(blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie) [NC]
RewriteCond %{HTTP_USER_AGENT} !(portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc) [NC]
RewriteCond %{HTTP_USER_AGENT} !(smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone) [NC]
RewriteCond %{HTTP_USER_AGENT} !(android|googlebot-mobile|iemobile|ipod|#opera mobile|palmos|webos) [NC]

# If so, THEN leave the request untouched (and optionally skip the following rules)
RewriteRule ^ - [L]
# If there are more non-mobile rewrite rules, skip the next two rules by using this instead:
# RewriteRule ^ - [L,S=2]

# ELSE (we meet some of the conditions):
RewriteRule ^/?$ http://sc55.duke4.net/index_m.php [L,R=302]
RewriteRule ^(games|history)\.php http://sc55.duke4.net/$1_m\.php [L,R]