我的域名(domain.com)有以下文件夹结构:
/ data / images(它是子域名,因此可通过http:// images.domain.com访问)
/ data / www(它是子域名,因此可通过http:// www.domain.com访问)
/data/.htaccess
我正在尝试:
如果images.domain.com中的某些图片不存在,请重写URL并请求www.domain.com/somescript.php,例如
http://images.domain.com/non-existing-image.jpg
应改写为
http://www.domain.com/somescript.php?id=non-existing-image.jpg
这是我的htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} \.(jpg|gif|png|bmp)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /data/www/somescript.php?id=$1 [L,QSA]
但它不起作用。浏览器说:“没找到”。如果我尝试将路径更改为“somescript.php”,则结果为“bad-request”或“not-found”。
通过访问日志,我发现在大多数情况下,“somescript.php”的路径是从“/ data / www / images /”开始的(所以最终路径不存在“/data/www/images/www/somescript.php “)所以我想我需要在我的文件夹结构中提高一级,但我不知道如何(我想我已经尝试了几乎所有的组合)。
有人可以帮助我如何正确设置RewriteBase和“somescript.php”文件的绝对/相对路径的组合吗?
我还想注意,如果我在htaccess文件的最后一行更改路径“http://www.domain.com/somescript.php”,它运行良好 - 但由于“http: //“它被重定向,我想重写。
非常感谢。
答案 0 :(得分:1)
尝试在重写规则开头替换/
。为了让它真正转到另一个域,你必须在域之前指定http://
,所以你的最后一行必须是这样的:
RewriteRule ^(.*)$ http://www.domain.com/somescript.php?id=$1 [L,QSA]
如果您没有指定http://
它被视为相对路径,并且将脱离当前正在使用的域,只需将其作为常规相对路径附加。
或:(这仅适用于某些设置)
Apache(或您正在使用的任何内容)不会脱离用户的主目录。它使用网站的根目录。因此,通过在域的开头指定/
,您实际上是在说/www/images.domain.com/<rest of absolute path>
。但是,如果这两个目录都由同一用户拥有,则可以使用相对路径转到父目录,然后转到备用目录,如下所示:
RewriteRule ^(.*)$ ../www.domain.com/somescript.php?id=$1 [L,QSA]
我不会推荐这么多,因为相对路径很容易被打破。