.htaccess htaccess在子域之间重写

.htaccess htaccess在子域之间重写,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我的域(domain.com)有以下文件夹结构: /数据/图像(它是子域名,因此可以通过http://images.domain.com访问) /data/www(它是子域名,因此可以通过http://www.domain.com访问) /data/.htaccess 我正努力做到: 如果images.domain.com中的某个图像不存在,请使用对www.domain.com/somescript.php的请求重写URL,例如 应重写为 以下是我的访问权限: RewriteEngine O

我的域(domain.com)有以下文件夹结构:

/数据/图像(它是子域名,因此可以通过http://images.domain.com访问)
/data/www(它是子域名,因此可以通过http://www.domain.com访问)
/data/.htaccess

我正努力做到: 如果images.domain.com中的某个图像不存在,请使用对www.domain.com/somescript.php的请求重写URL,例如

应重写为

以下是我的访问权限:

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”,结果是“请求错误”或“未找到”。
通过访问日志,我看到在大多数情况下,“somescript.php”的路径是从“/data/www/images/(因此最终路径是不存在的“/data/www/images/www/somescript.php”)开始的,所以我想我需要在我的文件夹结构中提高一个级别,但我不知道如何实现(我想我已经尝试了几乎所有的组合)

有人能帮我正确设置“somescript.php”文件的RewriteBase和绝对/相对路径的组合吗

我还想指出,如果我将路径更改为“http://www.domain.com/somescript.php在我的htaccess文件的最后一行,它工作得很好——但是由于“http://”,它被重定向了,我想作为重写


非常感谢。

尝试替换重写规则开头的
/
。为了让它真正转到另一个域,您必须在域之前指定
http://
,因此您的最后一行需要如下所示:

RewriteRule ^(.*)$ http://www.domain.com/somescript.php?id=$1 [L,QSA]
如果不指定
http://
,它将被视为一个相对路径,并将离开当前使用的域,只是将其作为常规相对路径附加


或:(这仅适用于某些设置)

Apache(或您正在使用的任何东西)不会离开用户的主目录。它使用网站的根目录。因此,在域的开头指定
/
,实际上就是说
/www/images.domain.com/
。但是,如果这两个目录都由同一用户拥有,则可以使用相对路径上至父目录,然后进入备用目录,如下所示:

RewriteRule ^(.*)$ ../www.domain.com/somescript.php?id=$1 [L,QSA]

不过我不推荐这么多,因为相对路径很容易被破坏。

您好,谢谢您的快速回复。如果我在开头添加“./”,路径仍然从“/data/www/images/”开始。。。这很奇怪——不管我加了多少“/…/”字。。使用一开始带有“http://”的绝对路径,它运行良好,但我需要重写而不是重定向。您可能被禁止离开该目录。这就是当你到达尽可能高的父目录时会发生的事情。我也认为是这样。可以在设置中的某个地方更改吗?或者在这种情况下,使用此文件夹结构是使用重定向的唯一有效方法?如果您具有SSH访问权限,可以尝试在images目录中设置指向主目录的符号链接。只是个想法,不知道是否有用。否则,除非您可以将
somescript.php
移动到images目录,否则您可能会被重定向所困扰。