Jump to content
  • 0

имя хоста в .htaccess


Быколай
 Share

Question

Есть на сервере две папки, из которых надо перебросить запросы на другие, т.к. там те же самые файлы лежат.


Redirect /catalog/RELECO http://мой.домен/PDF/RELECO
Redirect /catalog/TELE http://мой.домен/PDF/TELE

работает нормально, но когда решил использовать переменную окружения, переадресовка вообще не происходит:

Redirect /catalog/RELECO http://%{HTTP_HOST}/PDF/RELECO
Redirect /catalog/TELE http://%{HTTP_HOST}/PDF/TELE

Разве нельзя здесь использовать переменную? :dash:

PS: К тому же сайт имеет несколько доменов, и локальную копию, так что хотелось использовать второй, более универсальный вариант.

Link to comment
Share on other sites

18 answers to this question

Recommended Posts

  • 0

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

из которых надо перебросить запросы на другие

где эти другие лежат, там же на этом серваке?

да и вообще, переменные окружения используются по моему только в директиве RewriteCond, ну или по крайней мере совместно с ней..., так что тут я тоже погорячился.

нужно видимо что-то на подобие этого:


RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^example\.com/catalog/RELECO$
RewriteCond %{REQUEST_URI} !/PDF/RELECO
RewriteRule ^(.*)$ /PDF/RELECO$1 [L]

  • Like 1
Link to comment
Share on other sites

  • 0

А чего вы хотите добиться от переменной?

Вывода того же что и в $_SERVER['HTTP_HOST'] конечно же :)

Rus, всё на одном серваке, в пределах одного хоста. Грубо говоря, надо из одной папки, тупо в другую перебрасывать, т.к. одни и те же файлы в двух местах оказались. Дружище, а зачем в твоём примере example.com?

Link to comment
Share on other sites

  • 0
Вывода того же что и в $_SERVER['HTTP_HOST'] конечно же

Ну так если не указывать хост, то редирект будет вести на страницу в пределах хоста, к которому выполнялся запрос. Либо я так и не понял конечной цели...

$ curl -LI http://myhost.mydomain/preview/catalog/
HTTP/1.1 301 Moved Permanently
Date: Wed, 12 Sep 2012 20:14:41 GMT
Server: Apache/2.2.22 (FreeBSD) PHP/5.3.11 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8q DAV/2
Location: http://myhost.mydomain/preview/pdf/

HTTP/1.1 200 OK
Date: Wed, 12 Sep 2012 20:14:41 GMT
Server: Apache/2.2.22 (FreeBSD) PHP/5.3.11 with Suhosin-Patch mod_ssl/2.2.22 OpenSSL/0.9.8q DAV/2
Last-Modified: Wed, 12 Sep 2012 20:12:37 GMT
ETag: "55747-f-4c986cfdcd740"
Accept-Ranges: bytes
Content-Length: 15
Content-Type: text/html

$ cat preview/catalog/.htaccess 
Redirect 301 "/preview/catalog/" "/preview/pdf/"

Ежели нужно редиректить на разные файлы в зависимости от имени хоста, то пользуйтесь mod_rewrite и задавайте имя хоста в RewriteCond

Edited by hedgehog
Link to comment
Share on other sites

  • 0

hedgehog, странно, у вас этот код отработал?

У меня 500 ошибка от такого вот:


Redirect 301 "/catalog/RELECO/" "/PDF/RELECO/"
Redirect 301 "/catalog/TELE/" "/PDF/TELE/"

редиректить надо на тот же файл, только в другой папке.

Link to comment
Share on other sites

  • 0

А что в логах? Может, mod_alias отключен?

о, про логи-то я и забыл :facepalmxd:

в логах следующая ошибка

[Thu Sep 20 13:30:45 2012] [alert] [client 127.0.0.1] Z:/home/poligon.local/public_html/catalog/.htaccess: Redirect to non-URL

mod_alias полагаю включен, т.к. другие редиректы работают (к примеру первый из первого поста).

Link to comment
Share on other sites

  • 0

:)

Какая версия апача? Насколько я помню, это баг, который был исправлен лет пять назад.

ололо)))

2.2.4.0 на локалхосте под виндой (денвером),

Apache/2.0.63-lk.d у хостера.

Ошибка и там и там одинакова, видимо это не баг, все-таки а фича синтаксиса .htaccess'a который я плохо знаю :mellow:

Link to comment
Share on other sites

  • 0

Ну а пофиксили это в 2.2.6.

У меня 2.2.22, как можно увидеть в заголовках в выхлопе выше. Там же видно, что 301 работает и перебрасывает на страницу, которая отдает 200 :)

Попробуйте RedirectMatch или mod_rewrite

Edited by hedgehog
Link to comment
Share on other sites

  • 0

В файрбаге увидел, что переменные не работают в Redirect, а буквально подставляются в путь локэйшена.

Я правильно понял, что в более поздних версия можно делать redirect на путь без имени хоста и протокола, как в вашем примере? То есть на моей версии сервера не выйдет, то что у вас сработало?

Фух... доработал вариант предложенный Русом до рабочего:

RewriteEngine On
RewriteCond %{REQUEST_URI} !/PDF/TELE
RewriteRule ^(.*)$ /PDF/$1 [L]

Вроде всё работает. Спасибо, ребята! :yahoo:

Только вот не разобрался, как указать, чтобы происходила замена адреса на конечный, сейчас остаётся прежняя строка, хотя документ грузиться из другой папки? Флаг какой-то в конце дописать?

И почему-то в фаербаге не вижу заголовков переадресации :unsure:


Заголовки ответа
Accept-Ranges bytes
Connection Keep-Alive
Content-Length 174539
Content-Type application/pdf
Date Thu, 20 Sep 2012 10:52:29 GMT
Etag "37668-2a9cb-a03fcc00"
Keep-Alive timeout=5, max=100
Last-Modified Wed, 25 Mar 2009 10:04:32 GMT
Server Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.3.3
Заголовки запроса
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Connection keep-alive
Cookie __utma=262099468.2085744121.1316082437.1334908214.1335363622.44; __utmz=262099468.1316082437.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); BITRIX_SM_LOGIN=Gnato; BITRIX_SM_SALE_UID=0
Host poligon.local
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0

хотя она происходит.

Link to comment
Share on other sites

  • 0

быть может перманентный редирект?

ну то бишь: вместо [L] написать [R=301,L]

только 301 статус говорит о постоянной смене адреса, а вот 302 о временной.

о да)

Link to comment
Share on other sites

  • 0

UP

всё не то, пацаны :facepalmxd:


RewriteEngine On
RewriteCond %{REQUEST_URI} ^/PDF/TELE(.*)
RewriteRule ^(.*)$ /PDF/$1 [R=301,L]

RewriteCond %{REQUEST_URI} ^/PDF/RELECO(.*)
RewriteRule ^(.*)$ /PDF/$1 [R=301,L]

перебрасывает все запросы к /catalog/ на /PDF/, а надо только /catalog/TELE/ и /catalog/RELECO.

Временно решил создав обратно обе папки, и в каждый закинув по .htaccess такого вида:


RewriteEngine On
RewriteCond %{REQUEST_URI} !/PDF/TELE
RewriteRule ^(.*)$ /PDF/TELE/$1 [R=301,L]

а из /catalog/ убрал .htaccess. В принципе задачу это на 90% решило — папки пустые и дубли файлов я удалил, но хотелось бы довести до победного конца: производить переадресацию на уровне /catalog/.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy