2009-09-28 3 views
0

내가-MOD 다시 내 도메인의 하위 도메인을 기반으로 할 필요가있는 ... 나는이 작업을 수행해야하는 두 가지 시나리오가 있습니다 :mod_rewrite의 복잡성 문제

내 사이트가 다른 도시에 위치하고
  1. ... losangeles.example.com은 los angeles 등으로 현지화되어야합니다. 기본적으로 www.example.com/?loc=losangeles로 다시 작성됩니다.

  2. 사용자가 username.example.com을 자신의 프로필을 친구에게 쉽게 전달하십시오. 기본적으로 www.example.com/user.php?id=username으로 다시 작성됩니다.

내 사이트 규모가 늘어남에 따라 300 개 이상의 위치와 수천 명의 사용자를 보유 할 계획입니다 ... 즉, 각 다시 쓰기 규칙을 코딩하는 코드는 약간 지루할 것입니다.

위치 수정 하위 도메인과 사용자 이름 하위 도메인 사이의 변조를 다시 작성하도록하려면 어떻게해야합니까?

답변

2

기본적으로 네임 스페이스를 혼합하면 장기적으로 많은 골칫거리가 생길 수 있으므로이 전략을 다시 생각해 봐야한다고 생각합니다. alexandra.example.com과 같은 도시 이름을 빠뜨린 경우 사용자가 해당 사용자 이름을 등록한 경우 어떻게 될지 고려하십시오. 또한 사용자 이름을 만들려고하는 시점에 도시가 있는지 여부를 확인하는 등의 작업을 수행해야합니다.

정말로 이것을 고수하고 싶다면 한 지점으로 요청을 보내고 두 데이터베이스에 대한 조회를 수행 한 다음 내부적으로 $ city 또는 $ user 변수를 설정하십시오. 정상으로 다음 가상 호스트의 나머지 부분을

ServerAlias *.example.com 

및 아파치에 당신이 당신의 DNS 와일드 카드를 설정 한 후

는 설정합니다.

그런 다음 애플리케이션에서 $ _SERVER [ 'SERVER_NAME']을 (를) 확인하십시오.

$server_name = addslashes($_SERVER['SERVER_NAME']);  
$query = "select * from instances where '{$server_name}' regexp replace(concat(server, '$'),'.','\.') limit 1"; 

하지만 당신은 실제로 두 개의 네임 스페이스를 따로 잡아 당기거나 충돌 상황을 처리하기 위해 두 개의 쿼리 및 추가 논리를 가지고해야 할 것입니다.

나는 문제를 방지하고, 또한 당신이 바람직한 경우 사용자의 홈페이지, 당신이 입력 한 어떤 도시에 따라에서 볼 수 있습니다 무엇을 사용자 정의 할 수 있음을 의미 할

<cityname>.example.com/user/<username> 

같은 네임 스페이스를 사용합니다 .

+1

MySQL에'addslashes'를 사용하지 마십시오. mysql_real_escape_string을 사용하는 편이 낫다. – Gumbo