Добавить поддомен в существующий htaccess

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем Q_BASIC, 19 дек 2016.

  1. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    477
    Симпатии:
    1.183
    Приветствую,

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

    Поставил это:
    Код:
    RewriteCond %{HTTP_HOST} ^p.site.ru$
    RewriteCond %{REQUEST_URI} !^/p
    RewriteRule ^(.*)$ /p/$1 [L,QSA]
    Получил бесконечный редирект
    https://p.site.ru/p/ [301] -> http://p.site.ru/p/ [302 Found] и обратно

    Хотя даже папку (/p/) открывать не должно было.

    Весь htaccess:
    Код:
    AddDefaultCharset UTF-8
    
    RewriteEngine On
    
    RewriteBase /
    
    # Добавляет www
    RewriteCond %{HTTP_HOST} !^(.+\.)+(.+\.)+.+$
    RewriteCond %{HTTP_HOST} ^([^www].[^*].*)$
    RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301]
    
    # Редирект на HTTPS
    RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
    
    # Убирает в конце слеш
    RewriteCond %{HTTP_HOST} (.*)
    RewriteCond %{REQUEST_URI} /$ [NC]
    RewriteRule ^(.*)(/)$ $1 [L,R=301]
    
    # Все запросы перенаправляет на index.php
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
     
    dana77 нравится это.
  2. dollar1981

    dollar1981

    Заблокирован
    Регистр.:
    17 май 2012
    Сообщения:
    183
    Симпатии:
    69
    Для поддомена что то такое
    RewriteRule ^/(.*) http://otherhost/subdomain/$1
    Часть описана тут: https://www.nulled.cc/threads/201689/
    и еще вот:
    Без настроек Apache и записей в NS не обойтись. Но это делается всего один раз.

    <VirtualHost YOUR_IP:80>
    DocumentRoot "/home/user/www"
    ServerName "test.ru"
    ServerAlias "test.ru" "*.test.ru"
    ScriptAlias /cgi/ "/home/user/www/cgi/"
    ScriptAlias /cgi-bin/ "/home/oser/www/cgi-bin/"
    </VirtualHost>
    и добавить в NS записях запись типа "А":

    * A YOUR_IP
    далее в .htaccess:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^([a-zA-Z]+\.)?test\.ru
    RewriteRule ^(.*) index.php?name=%1 [L]
    С этого момента все запросы типа: petya|vasya|ya|supermod|test|durak.test.ru

    Будут приходить скрипту index.php?name=petya|vasya|ya|supermod|test|durak

    А там уж сами знаете что с ними делать.
     
  3. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    477
    Симпатии:
    1.183
    Что-то такое уже есть и так как надо не работает.
    Нужные поддомены у меня уже направлены на сайт.
    В данной Вами теме обсуждается редирект, а мне он не нужен. Мне надо как-раз убрать редирект
     
    dana77 нравится это.
  4. dollar1981

    dollar1981

    Заблокирован
    Регистр.:
    17 май 2012
    Сообщения:
    183
    Симпатии:
    69
    Так если он у вас прописан, как его не будет то? Вы его совсем хотите убрать? Или только перенаправить на нужную папку? Чё то я совсем запутался.
    Если просто надо убрать циклический редирект то вот:
    Код:
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
     
    Последнее редактирование: 20 дек 2016
  5. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    477
    Симпатии:
    1.183
    Надо чтобы пользователь открывал p.site.ru, а видел site.ru/p. Без редиректа
    А у меня редирект получается
     
    dana77 нравится это.
  6. dollar1981

    dollar1981

    Заблокирован
    Регистр.:
    17 май 2012
    Сообщения:
    183
    Симпатии:
    69
    Для того чтобы открывалось с под домена поддиректория пишется такое правило:
    Код:
    RewriteCond %{HTTP_HOST} ^(www.)?poddomen\.site\.ru$
    RewriteCond %{REQUEST_URI} !/poddomen/
    RewriteRule ^(.*)$ /poddomen/$1 [L]
    Тут на форуме есть тема, там про под домены как раз: https://www.nulled.cc/threads/255660/
     
  7. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    269
    Симпатии:
    339
    Сайт находится за Cloudflare, так что apache получает запрос всегда по http и если в правиле нет явного указания https://, то редирект будет на http:// вот как в этом правиле RewriteRule ^(.*)(/)$ $1 [L,R=301], которое убирает в конце слеш.
    По умолчанию в mod_dir включена опция DirectorySlash, которая наоборот добавляет в конце слеш для существующих каталогов.
    Можно поставить DirectorySlash Off или добавить RewriteCond %{REQUEST_FILENAME} !-d для правила, которое убирает в конце слеш.
    Код:
    AddDefaultCharset UTF-8
    
    RewriteEngine On
    
    RewriteBase /
    
    RewriteCond %{HTTP_HOST} ^(?:www\.)?p\.site\.ru$
    RewriteRule ^p/ - [L]
    
    RewriteCond %{HTTP_HOST} ^(?:www\.)?p\.site\.ru$
    RewriteRule ^(.*)$ /p/$1 [L]
    
    # Добавляет www
    RewriteCond %{HTTP_HOST} !^(.+\.)+(.+\.)+.+$
    RewriteCond %{HTTP_HOST} ^([^www].[^*].*)$
    RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301]
    
    # Редирект на HTTPS
    RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
    
    # Убирает в конце слеш
    RewriteRule ^(.*)/$ https://%{HTTP_HOST}/$1 [L,R=301]
    DirectorySlash Off
    
    # Все запросы перенаправляет на index.php
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    
     
    Q_BASIC нравится это.
  8. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    380
    Симпатии:
    134
    А разве p.site.ru и site.ru не является для апача разными доменами? Если это разные домены - апач всегда будет делать "редирект", что бы там в флагах не было указано...