2013-04-15 5 views
0

Каждый пользователь моего сайта получает свой собственный URL-адрес для имен пользователей, таких как username.example.com. Я знаю, что иногда люди печатают www перед URL. Когда пользователи это сделают, они будут перенаправлены системой на главную страницу. Есть ли способ (1) определить использование www, (2) имя пользователя и (3) перенаправить пользователя на username.example.com, а не www.username.example.com с PHP?Переслать пользователей, которые используют WWW в URL

Это не вопрос, связанный с DNS.

RewriteEngine On 
Options +Followsymlinks 
RewriteBase/
RewriteCond %{HTTP_HOST} . 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{REQUEST_FILENAME} !^.*/images/.*$ 
RewriteCond %{REQUEST_FILENAME} !^.*/uploads/.*$ 
RewriteCond %{HTTP_HOST}<>%{REQUEST_URI} ^([^.]+)\.bloggify\.no(:80)?<>/([^/]*) [NC] 
RewriteCond %1<>%3 !^(.*)<>\1$ [NC] 
RewriteRule ^(.*)$ - [E=BLOGUSER:%1] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^$ /index.php?w=%1 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^page([0-9]+)/([^/]+)?$ /index.php?w=%1&page=$1$2 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^profiles/([^/]+)/([^/]+)?$ /profile.php?u=$1$2 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^profiles/?$ /profile.php [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^albums/([^/]+)/([^/]+)?$ /album.php?u=$1$2 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^archive/(.*)/(.*)/([^/]+)?$ /archive.php?w=%1&y=$1&m=$2$3 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^archive\.php/(.*)/(.*)/([^/]+)?$ /archive.php?w=%1&y=$1&m=$2$3 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^archive/(.*)/([^/]+)?$ /archive.php?w=%1&y=$1$2 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^archive\.php/(.*)/([^/]+)?$ /archive.php?w=%1&y=$1$2 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^archive/([^/]+)?$ /archive.php?w=%1$1 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^archive\.php/([^/]+)?$ /archive.php?w=%1$1 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^friends/([^/]+)?$ /friends.php?w=%1$1 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^friends\.php/([^/]+)?$ /friends.php?w=%1$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/friends/page([0-9]+)/([^/]+)?$ /friends.php?w=$1&page=$2$3 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^([0-9]+)/([^/]+).html$ /entry.php?w=%1&e_id=$1 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^([0-9]+)/([^/]+)?$ /entry.php?w=%1&e_id=$1$2 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^&([^/]+)?$ /index.php?w=%1&$1 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^([^/]+)/([^/]+)?$ /index.php?w=%1&category=$1$2 [L] 
RewriteCond %{ENV:BLOGUSER} ^(.+)$ 
RewriteRule ^([^/]+)/page([0-9]+)/([^/]+)?$ /index.php?w=%1&category=$1&page=$2$3 [L] 
+1

PHP не запускает веб-сервер. Проверьте, какой продукт вы используете для размещения своего веб-сайта. Apache обычно используется для этой цели. – George

+0

Не сообщайте своим пользователям, что их URL-адрес «username.example.com». Это просто неправильно, 'username.example.com' не является допустимым URL. Сообщите своим пользователям, их URL-адрес «http: // username.example.com». Я подозреваю, что никто не захочет использовать 'http: // www.username.example.com' – Oswald

+0

Thats тривиально« исправить »с правилом перезаписи http://stackoverflow.com/questions/234723/generic-htaccess- redirect-www-to-non-www – AD7six

ответ

1

С «Это не вопрос DNS, связанные с» Я предполагаю, что у вас есть настройки входа подстановочные Dns и есть ваши настройки веб-сервера, чтобы загрузить один корень документа независимо от подобласти введенного. После этого вы можете просто проверить $_SERVER['HTTP_HOST'], чтобы получить полный домен. Explode(), что под "." и проверьте, является ли [0]www и отправляет 301 редирект (перемещается постоянно) на URL без www

Вы также можете сделать это с помощью mod_rewrite в apache. Вы можете написать RewriteCond, который проверяет, начинается ли %{HTTP_HOST} с www, а затем фиксирует остальную часть URL-адреса в шаблоне и записывает RewriteRule, который перенаправляет 301.

0

Как @George отметил в своих комментариях, вы, вероятно, будет лучший сервер, чтобы сделать этот вид URL переписывания на уровне веб-сервера, хотя это может быть сделано в PHP, исследуя значение $_SERVER['SERVER_NAME'] или $_SERVER['HTTP_HOST'] (который для использования будет зависеть от конфигурации сервера) и выдать перенаправление путем отправки заголовка в PHP (то есть header('Location: http://username.domain.com');)

Смежные вопросы