htaccess "поддельные поддомены"

Я рассматриваю htaccess и как использовать правила перезаписи, чтобы сделать своего рода «поддельный субдомен» для пользователей.

до сих пор у меня есть:

RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ([a-z0-9-]+)/? http://$1.domain.com [R=301,NC,L] RewriteCond %{HTTP_HOST} ^([az]+)\.domain\.com$ RewriteRule ^$ index.php?user=%1 

это займет какое-то / somthing и сделает его субдоменом, а затем передаст значение поддомена в качестве параметра для подбора.

я хочу, чтобы теперь можно было использовать фактические параметры и передавать их через нормальный с дополнительным параметром «пользователь» из «субдомена», например

 fred.domain.com/index.php?page=1&sort=up 

дал бы мне в $ _GET

 ['user'] = 'fred' ['page']= 1 ['sort'] = up 

но для жизни меня я не могу понять, как это сделать! как когда я добавляю какие-либо другие параметры, я теряю пользовательский бит

Любая помощь? знак равно

Также были бы полезны любые полезные руководства по htaccess! как и все найденные, действительно не объяснили, что делает каждый бит и почему = \

заранее спасибо

.htaccess файл здесь нечего делать. Это не может вам помочь.
Чтобы направить пользователя на ваш сервер, вам нужно изменить DNS-запись, а не конфигурацию веб-сервера.

Я предполагаю, что:

  • Вы владеете доменом domain.com , который размещается провайдером услуг хостинга (SHS).
  • У вас либо есть доступ к панели управления для настройки субдоменов, либо ваш провайдер SHS уже настроил сопоставление записей * A на свою общую службу.
  • Некоторые провайдеры SHS просто сопоставляют *.domain.com с фиксированным подкаталогом, например /webroot/domain.com/public_html ; другие делают это перенаправление верхнего уровня для своих пользователей и предоставляют панель управления, которая позволяет владельцам учетных записей связывать субдомены с конкретными подкаталогами.

Таким образом, вам необходимо разработать, что применимо в вашем случае:

  • глядя на ваши часто задаваемые вопросы провайдеров SHS,
  • попробовав http://sss.domain.com/ чтобы узнать, направляется ли он на ваш DOCROOT
  • используя phpinfo() чтобы узнать, какую переменную среды Rewrite она использует, чтобы указать на ваш DOCROOT. (По техническим причинам в Apache см. Виртуальные виртуальные хосты динамической массы с mod_rewrite ,% {DOCUMENT_ROOT} не могут быть правильно инициализированы для каждого пользователя, поэтому провайдеры обычно используют RewriteMap для инициализации stand-in; RewriteMap использует% {ENV: DOCUMENT_ROOT_REAL})

Итак, давайте предположим, что вы хотите создать блог по адресу http://blog.domain.com/ , вам может потребоваться:

  • Выдавать постоянные переадресации [R = 301] из старых ссылок на http://domain.com/blog/* на http://blog.domain.com/*
  • DOCROOT/blogdir/* внутренние переадресации из http://blog.domain.com/* в DOCROOT/blogdir/*
  • Добавьте необходимые условные блокировки для предотвращения бесконечных циклов перенаправления, где эта вторая внутренняя переадресация затем рассматривается как устаревшая ссылка.

Я мог бы дать вам набор правил перезаписи, чтобы сделать это, но, учитывая, что в этом месяце я ответил на дюжину вкусов этого самого Q, вы можете найти множество шаблонов, выполнив поиск или просмотрев мой блог ( Webfusion , .htaccess ) где я написал ряд статей, дающих больше объяснений.

Если вы хотите, чтобы одно приложение обнаружило подмножество подстановочных знаков домена, если вы можете закодировать это в регулярном выражении, вы можете сделать что-то вроде:

 RewriteCond %{HTTP_HOST} (sompattern)\.domain\.com RewriteRule ^(?!appdir/).* appdir/catchall.php?arg=$0&subdomain=%1 [L,QSA] 

(?!appdir/) называются отрицательным утверждением, и это останавливает саморегуляцию правила.

Я уверен, что вы можете установить vhost * .yourdomain.com, чтобы указать на один путь, а затем использовать mod_rewrite для разбора URL.