Alt etki alanları için mod_rewrite kullanarak

3 Cevap php

İnsanların benim site içinde kendi bölümleri kayıt edebilmek için wan't ve bu bölümler sitemde kendi alt alan var. yani birisi 'test' kayıt ve 'test.example.com' olacağını kendi sitesine bakın olabilir diyelim / site.php? id = 1 Peki ben bunun için bir mod_rewrite kuralı yazma konusunda gitmek?

3 Cevap

mod_rewrite Bunun için en iyi araç olmayabilir. RewriteRules başka bir şey için bir dosya eşleme için büyük, ama gerçekten etki alanı eşleştirme için değildi.

Eğer mod_rewrite aşağıdadır kullanarak yapabileceğiniz en iyi:

RewriteEngine On
# Skip www.domain.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule ^/(.*)$  site.php?domain=%1&file=$1 [L]

Gerçekten yararlı olmadığı. Programlı HTTP_HOST gibi değerini kontrol eğer ben onun yerine yapmak için ne öneriyoruz:

function get_subdomain() {
  if(preg_match('/^([^.]+)\.domain\.com/i', $_SERVER['HTTP_HOST'], $matches)) 
    return $matches[1];
}

Sen sanal konak kaplarda apache konfigürasyonunda "özel" alanları (örneğin www.mydomain.com, vb), iddia ve ilk sanal konak için başkalarının varsayılan sahip apache yapılandırabilirsiniz. Daha sonra URL inceler ve onların doğru alana kapalı kullanıcı gönderir gönderme uygulamasına baz url yazabilirsiniz.

Apache 2.0 docs:

Almost any Apache directive may go into a VirtualHost container. The first VirtualHost section is used for requests without a known server name.

. Ilk sanal konak * mydomain.com işlemek için kodu koyun:

<VirtualHost *:80>
  Servername custom.mydomain.com
  DocumentRoot /var/www/html/custom
  RewriteEngine on
  RewriteRule ^/$ /var/www/cgi-bin/dispatch.cgi [R]
  # more configs here
</VirtualHost>

<VirtualHost *:80>
  Servername www.mydomain.com
  DocumentRoot /var/www/html/homepage
  # more configs here
</VirtualHost>

Dispatch.cgi, kullanıcı gitmeli belirlemek için çağrı url inceleyin. Eğer tüm alt alanları kabul için DNS kurmak emin olun.

Umarım ki olur!

Aslında, biz son bir yıl için fazla sorun olmadan bu tekniği kullanarak oldum. Bizim mod_rewrite geneli gibi görünüyor:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.mydomain.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.com
RewriteCond %{REQUEST_URI} !admin
RewriteRule (.*) /admin/ [R=301,L]
RewriteRule ^admin(.*)$ hosted/admin/$1 [QSA,L]

Ne olur, kullanıcılar theiraccount.mydomain.com / admin yönelik olmasıdır.

Biz o zaman alan adının hesap bölümünü tanımlamak için PHP kullanabilirsiniz. $ _SERVER ['SERVER_NAME'] gibi bir şey veya alan adı alma ve ayrıştırma bazı yöntemi kullanarak çok iyi çalışıyor.

O. Htaccess olarak tuttu eğer rağmen, bu yüksek trafik sitelerde bir işlemci sorunu haline gelecektir httpd.conf bu yapılandırmaları tutun.