Назад | Перейти на главную страницу

URL переписать на другой домен

У меня есть доступ к папке на веб-сервере, в которую я хотел бы поместить файл .htaccess, чтобы при посещении пользователем www.somesite.com/myfolder/index.html ему показывалось содержимое страницы в другом домене. www.someothersite.com/blah/blah2/blah3/index.php?user=80338, у которого ужасно длинный URL-адрес, к которому у меня нет доступа к этой папке. Однако я не хочу, чтобы пользователь видел этот URL-адрес в своем браузере, просто для того, чтобы это произошло за кулисами - я пробовал читать несколько руководств по сети, и то, что я придумал, находится в каталоге myfolder:

RewriteEngine On
RewriteRule ^index\.html$ http://www.someothersite.com/blah/blah2/blah3/index.php?user=80338 [QSA,L]

Кажется, это перенаправление, но я тоже получаю новый URL, как я могу это остановить?

Настройка ProxyPass работает, но недавно я обнаружил, что вы можете сделать нечто подобное с перезаписью. Использование флага [P] в конце вашего RewriteRule приведет к тому, что перезапись будет обрабатываться mod_proxy. Базовый пример будет примерно таким:

RewriteRule ^(.*)$ http://www.example.com/$1 [P]

Любое внешнее перенаправление 301 или 302 на другую страницу будет отображаться как текущее местоположение в адресной строке URL-адреса браузера. Для достижения желаемого результата необходимо сохранить текущий родительский документ как локальный index.html. Так что у вас есть несколько вариантов для этого. (наверное, не полный список ...)

оберните запрос в ProxyPass

(это, вероятно, наиболее прозрачно для конечного пользователя, поскольку у них нет возможности определить, что страница на самом деле размещена удаленно, но немного более проблемна)

Чтобы скрыть перенаправление от клиента, вам нужно будет проксировать запрос в httpd.conf файл для вашего VirtualHost вот так;

 <Location /index.html>
   ProxyPass http://www.someothersite.com/blah/blah2/blah3/index.php?user=80338
 </Location>

Чтобы включить вышеуказанные директивы, вам необходимо установить и включить mod_proxy_http модуль apache2, который зависит от системы (например, yum, apt, a2enable)

Однако вы столкнетесь с некоторыми интересными проблемами сопоставления URL-адресов, которые вам придется решать в каждом конкретном случае, поэтому для того, чтобы это работало прозрачно, потребуются некоторые усилия.

Например, это зависит от того, как ссылки в вашем удаленном документе указаны относительными или полностью определенными. Вы можете исправить каждую ссылку и URL с помощью правил ProxypassReverse и Mod_substitute.

Альтернатива: загрузить страницу в iframe (или используйте старую рамку skool)

Ты можешь использовать iframe, который будет отображаться как адресная строка URL-адреса браузера, и загрузить удаленный документ в iframe с чем-то вроде этого;

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="EN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Full Page IFrame</title>
<style type="text/css">
html {overflow: auto;}
html, body, div, iframe {margin: 0px; padding: 0px; height: 100%; border: none;}
iframe {display: block; width: 100%; border: none; overflow-y: auto; overflow-x: hidden;}
</style>
</head>
<body>
<iframe id="tree" name="tree" src="http://www.someothersite.com/blah/blah2/blah3/index.php?user=80338" 
 frameborder="0" marginheight="0" marginwidth="0" 
 width="100%" height="100%" scrolling="auto"></iframe>
</body>
</html>

использовать старую моду набор фреймов

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head><title>My First Frame Page</title>
</head>
<frameset cols="100%">
<frame src="http://www.page3.com">
</frameset>
</html>