문제

나는 이전에 이것에 대해 몇 가지 스레드가 있다는 것을 알고 있지만 제안된 모든 것을 (내가 찾을 수 있는) 완전히 시도했지만 지금까지 아무것도 효과가 없었습니다...

이를 염두에 두고 제가 하려는 일은 다음과 같습니다.

먼저, 사용자가 페이지를 게시하고 각 사용자에게 원하는 하위 도메인을 제공할 수 있도록 허용하고 싶습니다(예:user.mysite.com).내가 수집한 바에 따르면 이를 수행하는 가장 좋은 방법은 mod_rewrite 및 .htaccess를 사용하여 user.mysite.com을 mysite.com/user에 매핑하는 것입니다. 맞나요?

그것이 맞다면 누군가 나에게 이 작업을 수행하는 방법에 대한 명시적인 지침을 줄 수 있습니까?

또한 저는 MAMP를 사용하여 로컬에서 모든 개발을 수행하고 있으므로 누군가가 동일한 방식으로 작동하도록 로컬 환경을 설정하는 방법을 알려주시면 매우 감사하겠습니다.솔직히 별거 다 해봤지만 이런 일은 처음이라 완전 당황스럽네요.어떤 도움을 주셔서 정말 감사합니다!

업데이트: 이러한 답변 중 일부는 정말 도움이 되었지만 제가 염두에 둔 시스템에서는 각 사용자에 대해 하위 도메인을 수동으로 추가하는 것이 옵션이 아닙니다.제가 정말로 묻고 있는 것은 이 작업을 즉석에서 수행하고 wildcard.mysite.com을 mysite.com/wildcard로 리디렉션하는 방법입니다. Tumblr가 설정되는 방식은 제가 하고 싶은 일의 완벽한 예입니다.다시 한 번 감사드립니다!

도움이 되었습니까?

해결책

DNS 하위 도메인 와일드카드를 설정하는 방법은 DNS 호스팅 공급자의 기능입니다.이는 귀하가 보유한 호스팅 제공업체에 따라 다른 단계가 될 수 있으며 해당 제공업체에게 더 나은 질문이 될 것입니다.

DNS 호스트를 설정하고 나면 웹 앱에서 실제로 URL 재작성을 할 수 있습니다. 이는 IIS를 사용하는 경우 isapi 재작성과 같은 웹 서버 자체에 대한 일종의 모듈을 사용하여 수행할 수 있습니다(이것은 가능하다면 선호되는 경로가 될 것입니다).또한 응용 프로그램 수준에서 재작성을 처리할 수도 있습니다(예: ASP.NET에서 라우팅을 사용하는 경우).

URL을 다시 작성하면 됩니다. http://myname.domain.com 될 것이다 http://domain.com/something.aspx?name=내 이름 또는 뭔가.이제부터 myname 값이 쿼리 문자열에 정상적으로 있는 것처럼 처리하면 됩니다.말이 돼?당신이 원하는 것을 오해하지 않았기를 바랍니다.

편집하다:

각 사용자에 대해 하위 도메인을 생성하는 것이 아니라 도메인 자체에 대해 와일드카드 하위 도메인을 생성하도록 제안하는 것입니다. 아무것.domain.com(기본적으로 *.domain.com)이 귀하의 사이트로 이동합니다.여러 도메인을 설정했습니다. 내 도메인.이를 설정하는 방법은 다음과 같습니다.

예, 와일드 카드를 구성 할 수 있지만 레코드로 설정하는 경우에만 작동합니다.와일드 카드는 C 이름으로 작동하지 않습니다.와일드 카드를 사용하려면 Astericks 문자 '*'를 사용합니다.예를 들어, 와일드 카드를 사용하여 생성하고 레코드를 사용하는 경우 .Domain.com, ''장소에 입력 된 모든 것'위치가 있으며 지정된 IP 주소로 해결됩니다.따라서 도메인 이름 앞에 'www', 'ftp', 'site'또는 기타 항목을 입력하면 항상 IP 주소로 해결됩니다.

*.domain.com이 내 사이트로 이동하도록 하는 방식으로 설정된 것이 있습니다.그런 다음 웹 앱에서 기본 URL을 읽어 ryan.domain.com이 현재 액세스되었는지 또는 bill.domain.com이 사용되었는지 확인할 수 있습니다.그런 다음 다음 중 하나를 수행할 수 있습니다.

  1. 하위 도메인이 쿼리 문자열의 일부가 되도록 URL 재작성을 사용하거나
  2. 액세스된 URL에서 호스트 값을 읽고 해당 값을 기반으로 몇 가지 논리를 수행하기만 하면 됩니다.

말이 돼?나는 정확히 다음과 같은 방식으로 여러 사이트를 설정했습니다.DNS 호스트로 도메인에 대한 와일드카드를 만든 다음 URL에서 호스트나 기본 도메인을 읽어 하위 도메인(실제로는 사용자 이름)을 기반으로 무엇을 표시할지 결정합니다.

편집 2:

DNS 항목 없이는 이 작업을 수행할 수 있는 방법이 없습니다."온라인 세계"는 name1.domain.com, name2.domain.com,...,nameN.domain.com이 모두 서버의 IP 주소로 이동한다는 것을 알아야 합니다.이를 수행하는 유일한 방법은 적절한 DNS 항목을 사용하는 것입니다.DNS 호스트를 사용하여 도메인에 대한 와일드카드 DNS 항목을 추가해야 합니다.그런 다음 URL에서 하위 도메인을 읽고 코드에서 적절한 조치를 취하기만 하면 됩니다.

다른 팁

*AMP를 실행하는 경우 가장 좋은 방법은 Thomas가 제안한 작업을 수행하고 Apache에서 가상 호스트를 수행하는 것입니다.설명하는 리디렉션을 사용하거나 사용하지 않고 이 작업을 수행할 수 있습니다.

가상 호스트

아마도 당신은 하고 싶을 것이다. 이름 기반 가상 호스트, 설정이 가장 쉽고 하나의 IP 주소만 필요하기 때문입니다(따라서 로컬 MAMP 시스템에서 설정하고 테스트하기도 쉽습니다).IP 기반 가상 호스트는 다른 측면에서는 더 낫지만 각 도메인에 대한 IP 주소가 있어야 합니다.

이것 위키피디아 페이지 하단에서 이름 기반 가상 호스트를 수행하는 방법에 대한 좋은 기본 연습에 대한 차이점과 링크를 논의합니다.

테스트를 위해 로컬 머신에서 가짜 테스트 도메인 이름에 대해 /etc/hosts에 가짜 DNS 이름도 설정해야 합니다.즉.Apache가 localhost를 수신하고 있고 Apache 구성에 vhost1.test.domain 및 vhost2.test.domain을 설정한 경우, localhost 뒤에 /etc/hosts의 127.0.0.1 줄에 이러한 도메인을 추가하면 됩니다.

127.0.0.1 localhost vhost1.test.domain vhost2.test.domain

/etc/hosts 편집을 완료하고 이름 기반 가상 호스트 구성을 Apache 구성 파일에 추가한 후 Apache를 다시 시작하면 테스트 도메인이 작동합니다.

mod_rewrite로 리디렉션

mod_rewrite로 리디렉션을 수행하려면(user.example.com이 직접 호스팅되지 않고 대신 example.com/user로 리디렉션되도록) RewriteCond를 수행하여 하위 도메인을 일치시키고 리디렉션해야 합니다.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com
RewriteRule ^(.*)$ http://example.com/subdomain$1 [R]

이를 .htaccess 또는 기본 Apache 구성에 넣을 수 있습니다.

리디렉션하려는 각 하위 도메인에 대해 마지막 두 개와 같은 규칙 쌍을 추가해야 합니다.또는 하나의 와일드 카드 규칙을 사용하여 * .example.com을 example.com/ *로 리디렉션하기 위해 하위 도메인을 다시 작성하여 캡처 할 수 있지만 보안 관점에서 나에게 정말 나쁜 냄새가납니다.

모두 함께 가상 호스트와 리디렉션

보다 명시적으로 수신하려는 각 호스트 이름에 대해 가상 호스트 구성 섹션을 설정하고 가상 호스트 구성 내에 이러한 각 호스트 이름에 대한 다시 쓰기 규칙을 넣는 것이 좋습니다.(이런 종류의 항목을 .htaccess가 아닌 Apache 구성에 넣는 것이 항상 더 안전하고 빠릅니다. 가능하다면 .htaccess는 Apache가 파일 시스템에서 .htaccess 파일을 지속적으로 검색하고 다시 구문 분석하기 때문에 성능을 저하시킵니다. 사용자가 망칠 수 있기 때문에 덜 안전합니다.)

이와 같이 모두 함께 Apache 구성 내의 가상 호스트 구성은 다음과 같습니다.

NameVirtualHost 127.0.0.1:80

# Your "default" configuration must go first
<VirtualHost 127.0.0.1:80>
  ServerName example.com
  ServerAlias www.example.com
  DocumentRoot /www/siteroot
  # etc.
</VirtualHost>

# First subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost1.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost1$1 [R]
</VirtualHost>

# Second subdomain you want to redirect
<VirtualHost 127.0.0.1:80>
  ServerName vhost2.example.com
  RewriteEngine On
  RewriteRule ^(.*)$ http://example.com/vhost2$1 [R]
</VirtualHost>

이 질문에 꽤 늦게 답변했다는 것을 알고 있지만 로컬 개발 솔루션과 관련하여 동일한 문제가 있었습니다.~ 안에 또 다른 SO 스레드 나는 더 나은 해결책을 찾았고 나중에 같은 질문을 가진 모든 사람을 위해 공유하겠다고 생각했습니다.

모든 하위 도메인을 127.0.0.1로 확인하는 VMware 소유 와일드카드 도메인:

vcap.me resolves to 127.0.0.1
www.vcap.me resolves to 127.0.0.1

또는 더 많은 다양성을 위해 37 Signals는 특정 형식을 사용하여 모든 하위 도메인을 특정 IP에 매핑하는 도메인을 소유하고 있습니다.

127.0.0.1.xip.io resolves to 127.0.0.1
www.127.0.0.1.xip.io resolves to 127.0.0.1
db.192.168.0.1.xip.io resolves to 192.168.0.1

보다 xip.io 더 많은 정보를 위해서

나는 Ubuntu 16.04를 사용하고 있으며 14.04부터 Dave Evans가 제공하는 솔루션을 사용하고 있습니다. 여기 그리고 그것은 나에게 잘 작동합니다.

  1. 설치하다 dnsmasq

    sudo apt-get install dnsmasq
    
  2. 새 파일 만들기 localhost.conf 아래에 /etc/dnsmasq.d 다음 줄을 사용하여 dir

    #file /etc/dnsmasq.d/localhost.conf
    address=/localhost/127.0.0.1
    
  3. 편집하다 /etc/dhcp/dhclient.conf 그리고 다음 줄을 추가하세요

    prepend domain-name-servers 127.0.0.1;
    

    (이 줄은 이미 존재하므로 주석 처리를 제거하면 됩니다.)

  4. 마지막은 서비스를 다시 시작하는 것입니다.

    sudo systemctl restart dnsmasq
    sudo dhclient
    

마지막으로 작동하는지 확인해야 합니다.

dig whatever.localhost

메모:

웹 서버에서 사용하려면 간단히 변경하면 됩니다. 127.0.0.0 실제 IP 주소로.

내 사이트 중 하나에 대해 정확히 동일한 작업을 수행해야 했습니다.다음 단계를 수행할 수 있습니다.

  1. 서버에 cPanel이 있는 경우 하위 도메인을 만드세요. *, 그렇지 않은 경우 DNS에 A 레코드를 설정해야 합니다(BIND의 경우 참조). http://ma.tt/2003/10/wildcard-dns-and-sub-domains/).당신의 개발에.서버에 하위 도메인을 추가하여 가짜 하위 도메인을 만드는 것이 훨씬 나을 것입니다. hosts 파일.

  2. (cPanel을 사용했다면 이 작업을 수행할 필요가 없습니다).Apache vhosts 파일에 다음과 같은 내용을 추가해야 합니다.실행 중인 서버 유형(공유 여부)에 따라 크게 달라집니다.다음 코드는 완전하지 않습니다.단지 방향을 제시하는 것뿐입니다.메모: ServerAlias example.com *.example.com 중요하다.

    <VirtualHost 127.0.0.1:80>  
            DocumentRoot /var/www/  
            ServerName example.com  
            ServerAlias example.com *.example.com  
    </VirtualHost>
    
  3. 다음으로, PHP 스크립트를 사용하여 "Host" 헤더를 확인하고 하위 도메인을 찾아 그에 따라 콘텐츠를 제공할 수 있습니다.

먼저, 사용자가 페이지를 게시하고 각각 선택한 하위 도메인을 제공 할 수 있도록하고 싶습니다 (예 :user.mysite.com).내가 수집 할 수있는 가장 좋은 방법은 mod_rewrite와 .htaccess를 사용하여 user.mysite.com을 mysite.com/user에 매핑하는 것입니다.

다음을 사용하는 것이 더 나을 수도 있습니다. 가상 호스트.이렇게 하면 각 사용자는 다른 사용자와 거의 독립적으로 웹 서버 구성을 가질 수 있습니다.

구문은 다음과 같습니다.

<VirtualHost *:80>
    DocumentRoot /var/www/user
    ServerName user.mysite.com
    ...
</VirtualHost>

내가 본 많은 웹호스트에서 그들은 아파치에 가상 호스트를 설정했습니다.

따라서 www.mysite.com이 /var/www에서 제공되는 경우 각 사용자에 대한 폴더를 만들 수 있습니다.그런 다음 가상 호스트를 해당 폴더에 매핑합니다.

이를 통해 mysite.com/user 및 user.mysite.com이 모두 작동합니다.

테스트 환경의 경우 Windows를 사용하는 경우 HOSTS 파일을 편집하여 mysite.com을 로컬 PC(127.0.0.1) 및 테스트용으로 설정한 모든 하위 도메인에 매핑하는 것이 좋습니다.

Ubuntu 18.04에서 찾은 솔루션은 다음과 유사합니다. 이 하나 그러나 NetworkManager 구성이 포함됩니다.

  1. 파일 편집 /etc/NetworkManager/NetworkManager.conf, 그리고 다음 줄을 추가하세요 dns=dnsmasq ~로 [main] 부분

    sudo editor /etc/NetworkManager/NetworkManager.conf
    

    다음과 같아야 합니다:

    [main]
    plugins=ifupdown,keyfile
    dns=dnsmasq
    ...
    
  2. NetworkManager의 resolv.conf 사용 시작

    sudo rm /etc/resolv.conf
    sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
    
  3. 와일드카드 구성으로 파일 만들기

    echo 'address=/.localhost/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/localhost-wildcard.conf
    
  4. NetworkManager 구성 다시 로드

    sudo systemctl reload NetworkManager
    
  5. 테스트해 보세요

    dig localdomain.localhost
    

로컬 개발 설정을 사용할 때 일부 유형의 인증에 매우 유용한 다른 도메인을 추가할 수도 있습니다.

echo 'address=/.local-dev.workdomain.com/127.0.0.1' | sudo tee /etc/NetworkManager/dnsmasq.d/workdomain-wildcard.conf

그러면 다음과 같이 작동합니다.

dig petproject.local-dev.workdomain.com

;; ANSWER SECTION:
petproject.local-dev.workdomain.com. 0 IN   A   127.0.0.1
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top