Помогите настроить редирект/запрет

12
S
На сайте с 13.11.2012
Offline
72
1232

Не могу настроить запрет открытия сайта из поддериктории /sites/сайт/, /sites/сайт2/ и т.д.

Настроил работу на поддомене по адресу сайт.домен.ру, сайт2.домен.ру, но они по прежнему доступны и по адресу домен.ру/sites/сайт/...

Как запретить работу домен.ру/sites/сайт/, чтобы работали только поддомены?

Встречаются еще адреса вида сайт2.домен.ру/pages/contact, необходимо чтобы они тоже работали, просто была проблема с этим, работали сайт2.домен.ру, сайт2.домен.ру/pages а сайт2.домен.ру/pages/contact не хотели работать.

p.s. есть возможность в каждый сайт вставить нужный .htaccess, ну и в корень основного домена тоже.

Спасибо!

S
На сайте с 13.11.2012
Offline
72
#1

Мой корневой .htaccess

Options -Indexes
Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.сайт\.ru$
RewriteRule ^(.*)$ sites/%2/$1 [QSA,L]

RewriteCond %{REQUEST_URI} !api\\dispatch\.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^api/.* api/dispatch.php [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

.htaccess внутри /sites/сайт/

Options +FollowSymLinks
Options -Indexes
RewriteEngine On

ErrorDocument 400 /page/error
ErrorDocument 401 /page/error
ErrorDocument 403 /page/error
ErrorDocument 404 /page/error
ErrorDocument 500 /page/error

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
siv1987
На сайте с 02.04.2009
Offline
427
#2
Smirnof:
Встречаются еще адреса вида сайт2.домен.ру/pages/contact, необходимо чтобы они тоже работали,

Уже слишком много условий получается, и кривой костыль.

Или вы настраиваете чтобы все работало только на поддоменах и ставите редирект, либо запрещаете в роботс /sites/

Перед

RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.сайт\.ru$

RewriteRule ^(.*)$ sites/%2/$1 [QSA,L]

Добавить

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteRule ^sites/([^/]+)/(.*) http://$1.сайт.ру/$2 [R=301,L]

Либо более крутой вариант с проверкой если есть каталог поддомена

RewriteCond %{ENV:REDIRECT_STATUS} ^$

RewriteCond %{DOCUMENT_ROOT}/sites/$1/ -d

RewriteRule ^sites/([^/]+)/(.*) http://$1.site.ru/$2 [R=301,L]

S
На сайте с 13.11.2012
Offline
72
#3

siv1987, пробовал оба ваших варианта, стало вроде лучше чем было

Но старые адреса так и работают

Или вы настраиваете чтобы все работало только на поддоменах и ставите редирект

Меня и такой вариант устроил бы, если главная страничка сайта будет работать.

Может у вас есть еще какие варианты? Или подскажите как выполнить правильный редирект.

Apache и Nginx, тоже ковырял, VirtualDocumentRoot прописывал, что-то получается, что-то нет, все на половину :(

server в nginx.conf

server {
listen 0.0.0.0:80;
server_name site.ru *.site.ru;
rewrite ^(/manager/.*)$ https://$host$1 permanent;
error_page 404 = @fallback;
location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
proxy_pass http://0.0.0.0:8080;
proxy_redirect http://site.ru:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://0.0.0.0:8080;
proxy_redirect http://site.ru:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
root /var/www/github/data/www/site.ru;
access_log /var/www/httpd-logs/site.ru.access.log ;
access_log /var/www/nginx-logs/github isp;
}
location @fallback {
proxy_pass http://0.0.0.0:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
siv1987
На сайте с 02.04.2009
Offline
427
#4

Вообще-то выше и есть редирект. Что тогда вроде лучше стало?..

S
На сайте с 13.11.2012
Offline
72
#5

При вводе не верного адреса, редиректило на его не существующий поддомен, все.

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^sites/([^/]+)/(.*) http://$1.github.ru/$2 [R=301,L]

домен.ру/sites/сайт7/ папки этой не существует, при ее запросе, редиректит на сайт7.домен.ру - 404 Not Found

siv1987
На сайте с 02.04.2009
Offline
427
#6

Что-то я все равно не пойму, проблема в чем? Редирект есть, работает? Вы сказать можете что работает и что не работает? Редирект выше и был написан для таких случаях.

S
На сайте с 13.11.2012
Offline
72
#7

1. сайт доступен по 2 адресам, но это терпимо, действительно, можно и в robots.txt запретить.

2. сейчас и редирект пропал

домен.ру/sites/сайт7/ папки этой не существует, при ее запросе, редиректит на сайт7.домен.ру - 404 Not Found

3. стили слетают из-за чего-то, сайт читаем но выглядит не так как должен.

4. если прописываю VirtualDocumentRoot...../sites/%1

поддомены работают, стили не работают, test2.домен.ру/blog, test2.домен.ру/page/contact не работают, главная страница сайта вообще не открывается 404 :(

......

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

siv1987
На сайте с 02.04.2009
Offline
427
#8

По каким адресам? Так редирект работает или нет?

Почистите кеш браузера, используйте не крутой вариант который без проверки.

Стили и все остальное ваша проблема настроить должным образом.

S
На сайте с 13.11.2012
Offline
72
#9

Редиректа нет вообще (на данный момент).

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

Использовал .htaccess без проверки.

---------- Добавлено 22.03.2014 в 13:05 ----------

Странно, был редирект пусть и не тот, и нет его.

(домен.ру/sites/сайт7/ папки этой не существует, при ее запросе, редиректит на сайт7.домен.ру - 404 Not Found)

S
На сайте с 13.11.2012
Offline
72
#10

Остановился на своем варианте


Options -Indexes
Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.сайт\.ru$
RewriteRule ^(.*)$ sites/%2/$1 [QSA,L]

RewriteCond %{REQUEST_URI} !api\\dispatch\.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^api/.* api/dispatch.php [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

т.к. он работает также как и ваш, сайт доступен по двум адресам.

Хотел попросить вас siv1987, оценить данный код .htaccess он верный?

Какой все же посоветуете использовать?

С отображением сайта так и не разобрался, все стили и скрипты доступны по обеим адресам (домен, поддомен), а внешний вид на поддомене теряется, первый раз с таким столкнулся, не пойму в чем дело.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий