URL将手机重写为子目录

时间:2013-08-08 15:05:01

标签: .htaccess mobile mod-rewrite

我正在使用:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/mobile
RewriteCond %{DOCUMENT_ROOT}/mobile%{REQUEST_URI} -d
RewriteRule ^(.*?)/?$ /mobile/$1/ [L]

RewriteCond %{HTTP_USER_AGENT} "android|iphone|ipod" [NC]   
RewriteCond %{REQUEST_URI} !^/mobile
RewriteRule ^(.*)$ /mobile/$1 [L]

问题是当移动设备被重定向时,根目录中的图像将无法加载。我正在使用它,因为我需要将子目录(mobile)添加到url示例:

www.example.com/sub/file.php
www.example.com/mobile/sub/file.php

这段代码有效,但是根目录中的图片甚至没有显示src的路径显示没有/ mobile /添加了htaccess规则。如果我将RewriteCond%{REQUEST_FILENAME}!-f添加到secund编辑的secund行中,那么root上的图像正在加载,但我从未被重定向到mobile子目录,因为所有的url都存在。

RewriteCond %{REQUEST_URI} !^/mobile
RewriteCond %{DOCUMENT_ROOT}/mobile%{REQUEST_URI} -d
RewriteRule ^(.*?)/?$ /mobile/$1/ [L]

RewriteCond %{HTTP_USER_AGENT} "android|iphone|ipod" [NC]
RewriteCond %{REQUEST_FILENAME} !-f   
RewriteCond %{REQUEST_URI} !^/mobile
RewriteRule ^(.*)$ /mobile/$1 [L]

2 个答案:

答案 0 :(得分:0)

由于ALL文件存在于根目录中,但并非所有文件都存在于移动目录中,因此您有两种选择。

最简单的一个是,为了使文件例外,不要将它们重写为移动设备。

RewriteCond %{REQUEST_URI} !(jpg|png|jpeg|gif)

第二个选项是执行两个步骤:首先将所有内容重写为/ mobile。如果文件不存在,请将其重写回root,但添加一个标记,以便它不会被重新写入移动设备!

#In case of a mobile device, rewrite everything to mobile. (windows phone = wp or wo7 / wp8)
RewriteCond %{HTTP_USER_AGENT} "android|iphone|ipod|wp" [NC]
RewriteCond %{REQUEST_URI} !mobile
RewriteCond %{QUERY_STRING} !noRewrite
RewriteRule ^(.*?)$ /mobile/$1 [L]

#In case the file exists, good, else rewrite back to non-mobile.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/mobile
RewriteRule ^mobile/(.*)$ /$1?noRewrite [L]

上面的htaccess已经过测试,而image.jpg在root中,而index.php在root中都是/ mobile。 index.php完美地显示了图像。

答案 1 :(得分:0)

谢谢杰弗里,到目前为止,我的回答是最接近我的情景的。只是添加到最初的问题。假设家庭目录中有一个htaccess,移动目录中有另一个htaccess,

  1. 上面的代码中包含哪两个文件?
  2. 我在另一个文件中放了什么?