0

我在用着:

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]

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

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

此代码有效,但根目录中的图像甚至不显示 src 的路径表明没有 /mobile/ 添加了 htaccess 规则。如果我将 RewriteCond %{REQUEST_FILENAME} !-f 添加到 conds 的第二行,就像在 secund 编辑中那样,根目录上的图像正在加载,但我永远不会被重定向到移动子目录,因为所有 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]
4

2 回答 2

0

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

最简单的一个是,对文件进行例外处理,不要将它们重写到移动设备上。

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

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

#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 位于根目录中,而 index.php 都位于根目录中作为 /mobile。index.php 完美地显示了图像。

于 2013-08-08T17:13:02.730 回答
0

谢谢杰弗里,你的回答是我迄今为止看到的最接近我的情况。只是添加到最初提出的问题。假设主目录中有一个 htaccess,移动目录中有另一个 htaccess,

  1. 这两个文件中的哪一个将包含上面的代码?
  2. 我在另一个文件中放了什么?
于 2015-04-28T22:16:21.263 回答