2012-02-04 4 views
0

я получил следующую структуру папок для моего домена (domain.com):Htaccess переписывания между поддоменами

/данные/изображения (имя подмигнули субдомно, так подмигнули через HTTP, доступные: // images.domain .com)
имя /данные/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»?

Я также хочу отметить, что если я изменю путь к «http://www.domain.com/somescript.php» на последней строке в моем файле htaccess, он работает хорошо, но из-за «http : // «он перенаправлен, и я хотел бы сделать его переписанным.

спасибо.

ответ

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] 

Я бы не рекомендовал это, однако, поскольку относительные пути легко могут быть нарушены.

+0

Hallo, спасибо за ваш быстрый ответ. Если я добавлю «../» в начале, путь все равно начинается с «/ data/www/images /» ... это странно - независимо от того, сколько «/../» я добавляю .. С Абсолютный путь с «http: //» вначале работает хорошо, но мне нужно переписать вместо перенаправления. – Jarred

+0

Вам может быть запрещено покидать этот каталог. Это то, что происходит, когда вы достигаете наивысшего родительского каталога. – animuson

+0

Я тоже подумал. Может ли быть изменено где-то в настройках? Или в этом случае и с этой структурой папок является единственным рабочим способом использования перенаправления? – Jarred

Смежные вопросы