We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 2532
    • 31 Posts
    Известно что MODx использует адреса вида хттп://сайт.ru/index.php?id=4

    Можно включить "Использовать семантические URL" и "Использовать вложенные URL"

    При этом .htaccess будет иметь:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
    


    тогда, при следующей структуре:
    + юзеры
    + имя_юзера
    - что-то_ещё
    - и_ещё

    Адреса смогут принимать вид: хттп://мойсайт.ру/юзеры/имя_юзера/что-то_ещё/

    Я хочу чтобы при той-же структуре адрес получался таким: хттп://имя_юзера.мойсайт.ру/что-то_ещё/

    На DNS-сервере вайлдкард прописан.
    В Апаче добавлен ServerAlias *.мойсайт.ру - чтобы запросы на любые поддомены попадали на мойсайт.ру

    Собственно загвостка в том, что никак не соображу чего дописать в .htaccess, чтобы решить задачку.
    Подскажете? smiley
      • 23451
      • 232 Posts
      По моему, htaccess тут ни при чем. Он ведь просто переписывает поступающие от браузеров запросы. Из ЧПУ вида в обычный, с параметрами.
      Наверное вам надо будет написать свои сниппеты, которые будут формировать такие хитрые ссылки и не пользоваться стандартными типа [~[*id*]~].
        • 9198
        • 100 Posts
        Что-то похожее на это: smiley
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ %{HTTP_HOST}$1 [C]
        RewriteRule ^(.*)\.мойсайт.ру(.*)$ index.php?q=юзеры/$1$2 [L,QSA]
        
          • 2532
          • 31 Posts
          EVD, чего-то не так. Не работает ):

          Pisto Ganza
          Попробовал написать плагин, но чего-то не допонимаю как задуманное реализовать.
          Плагин перехватывает системное событие OnWebPageInit, разбирает строчку запроса, выделяет из неё субдомен и перенаправляет браузер по нужному пути.

          $pathWeb = 'http://www.мойсайт.ru';
          $subDir= 'юзеры';
           
          $pathClear = preg_replace("/http:\/\/|www./i", "", $pathWeb);
          if($_SERVER['HTTP_HOST'] != 'www.'.$pathClear and $_SERVER['HTTP_HOST']!= $pathClear)
          {
               $subdomain = preg_replace("/http:\/\/|.$pathClear|www./i", "", $_SERVER['HTTP_HOST']);
               $domain = preg_replace("/".$subdomain."./", "", $_SERVER['HTTP_HOST']);
               header('Location: http://'.$domain.'/'.$subDir.'/'.$subdomain);
          }


          Короче удалось только перехватывать запрос типа хттп://имя_юзера.мойсайт.ру и перенаправлять браузер на хттп://мойсайт.ру/юзеры/имя_юзера
          Но опять-же перенаправление не то, что хочется получить.
          В какую сторону ковырять? huh
            • 9198
            • 100 Posts
            чего-то не так. Не работает ):
            А если включить в Apache лог mod_rewrite и посмотреть что не так? smiley
              • 2532
              • 31 Posts
              ё-хо-хо!!!
              победил!!!!
              ...ща, отойду от шока и напишу решение (:
                • 2532
                • 31 Posts
                Дано:

                Структура в базе:
                [tt]
                + users
                + username
                + blog
                - blogentry1
                - blogentry2[/tt]

                "Использовать семантические URL" и "Использовать вложенные URL" включено

                Имеем доступ по адресу: хттп://мойсайт.ru/users/username/blog/blogentry1

                .htaccess:
                RewriteEngine On	
                RewriteBase /
                
                RewriteCond %{HTTP_HOST} ^(.+)\.мойсайт\.ru
                RewriteRule ^(.*)$ index.php?q=users/%1/$1 [QSA]
                
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
                


                т.е. добавили:
                RewriteCond %{HTTP_HOST} ^(.+)\.мойсайт\.ru
                RewriteRule ^(.*)$ index.php?q=users/%1/$1 [QSA]


                Теперь имеем доступ по адресу: хттп://username.мойсайт.ru/blog/blogentry1

                Всем спасибо.
                Ура товарищи! grin
                  • 1611
                  • 591 Posts
                  Классная идея.
                  Только я не понял что нужно сделать на DNS сервере, чтобы это заработало.
                  Что такое вайлдкард?
                    • 23451
                    • 232 Posts
                    маска.
                    например: *.site.ru. 14400 IN A 1.2.3.4
                    Т.е. для всех поддоменов домена site.ru резолв будет в 1.2.3.4