Я рассматриваю 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). *.domain.com
с фиксированным подкаталогом, например /webroot/domain.com/public_html
; другие делают это перенаправление верхнего уровня для своих пользователей и предоставляют панель управления, которая позволяет владельцам учетных записей связывать субдомены с конкретными подкаталогами. Таким образом, вам необходимо разработать, что применимо в вашем случае:
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/
, вам может потребоваться:
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.