переписывание htaccess между поддоменами - PullRequest
0 голосов
/ 04 февраля 2012

У меня есть следующая структура папок для моего домена (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"?

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

Большое спасибо.

1 Ответ

1 голос
/ 04 февраля 2012

Попробуйте заменить / в начале вашего правила перезаписи. Чтобы он действительно перешел в другой домен, вы должны указать 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]

Хотя я бы не советовал так много, поскольку относительные пути могут легко сломаться.

...