2012-03-07 3 views
0

트위터가 다음과 같이 URL을 쓰는 방법을 알고 계십니까? twitter.com/{username}?htaccess 및 사용자 계정

어떻게 달성 할 수 있습니까? 거기에 htaccess 코딩이 포함되어 있어야합니다. 나는 그것을 시도했지만 코드가 혼란 스러울 때 사용자 이름이나 뭔가 다른 페이지를 반복해서 보여줍니다.

RewriteRule ^([^/]+)$ login/id.php?name=$1 
RewriteRule ^#/([^/]+)$ tags/tag.php?name=$1 

내가 www.mysite.com을 작성하는 경우 그래서,이 홈 페이지에 저를 소요, ​​나는 www.mysite.com/{random name that is not a register user}를 입력하면, 다시 집으로 나를 취

여기 내 코드입니다. 이로 인해 URL에 중대한 오류가 발생합니다. www.mysite.com/indexwww.mysite.com/index2은 두 개의 서로 다른 파일이지만 동일한 페이지로 이동합니다. 그건 그렇고, 파일 확장명을 숨기려면 htaccess 설정했습니다.

답변

1

htaccess은 성능에 좋지 않으며 php로 라우팅을 처리하는 것보다 더 제한적입니다.

RewriteCond %{REQUEST_URI} !\.(png|jpe?g|gif|css|js|html)$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^.*$ index.php [L] 

그런 다음, 라우팅는 것처럼 간단 할 수있다 : 첫째, 당신은 단지 PHP 파일에 대부분의 요청 직접 htaccess를 사용

$pieces = preg_split('-/-', $_SERVER['REQUEST_URI'], NULL, PREG_SPLIT_NO_EMPTY); 
$username = $pieces[0]; 

include "users/{$username}.php"; 

을하지만, 할 훨씬 더 실제에있다 응용 프로그램 컨텍스트 관심을 가질만한 라우팅 기능이 내장 된 PHP 프레임 워크가 많이 있습니다. 주요 프레임 워크에는이 기능이 포함됩니다. https://stackoverflow.com/a/20034826/1435655

조금 더 확장하려면, 당신은 당신이 동의하고이를 처리 할 어떤 경로를 쓰는 대부분의 라우팅 시스템이 사용하는 기본 개념 :

여기에 비슷한 이전 게시물에 대한이 답변의가 두드러 확장 버전입니다 . 요청이 들어 오면 해당 경로가 일치 항목이 발견 될 때까지 검색됩니다.이런 식으로 생각 : 당신은 /users/someDudesomeDude의 값을가집니다 $routeParams['username'] 같은 users.php 무언가로 전송됩니다 그래서 URL 매개 변수를 정의하는 것을 확장 할 수

$myRoutes = [ 
    '/' => 'home.php', 
    '/about' => 'about.php' 
    //etc 
]; 

$route = $_SERVER['REQUEST_URI']; 
if (in_array($route, $myRoutes)) { 
    include $myRoutes[$route]; 
} 
else { 
    echo "Go to a real page. This one doesn't exist." 
} 

.

1
RewriteRule ^(.*)?$ tags/tags.php?name=$1 [NC,L] 

이 혼자 태그/tags.php 파일에 모든 것을 다시 작성합니다 도와주세요. 조건부를 사용하여 특정 중요한 경로를 제외 할 수 있습니다.

RewriteCond %{REQUEST_URI} !^\/?accounts[.*]$ [NC] 
RewriteRule ^(.*)?$ tags/tags.php?name=$1 [NC,L] 

... 나는 재 작성 조건 구문 잘 생각하지만 예상과 태그 파일에 모든 다른 경로로

가 그래서 계정에 모든 것이/부여됩니다 ... 그것을 테스트하지 않았습니다. 사이트의 복잡성에 따라 이는 좋거나 나 나쁜 아이디어 일 수 있습니다. 귀하의 초점이 사용자에게 있고 다른 페이지 (예 : about, faq, contact, etc.)가 거의 없다면 문제가되지 않습니다. 그렇지 않으면 조건부 정렬을 위해 악몽에 빠질 수 있습니다.

나는/accounts뿐만 아니라 tags.php를 예로 사용했습니다. 귀하의 정확한 구조를 알 수 없도록 귀하의 사이트 구조를 알지 못합니다. 이것은 당신을 시작하게하는데 충분할 것입니다.

요점은 첫 번째 URI 세그먼트와 비교하기 때문에 tags.php htaccess 규칙보다 많은 조건을 준비해야한다는 것입니다. 희망 경로가 www.yoursite.com/user/username과 비슷하다면 훨씬 쉬울 것입니다.

+0

정규 표현식에서'? '앞에'/'가 있어야합니다. /가 선택적 인 경우에만 – switz

+0

을 입력하십시오. 이 경우에는 첫 번째 URI 세그먼트와 비교해야하기 때문에 필요하지 않다고 생각합니다. 나는이 게시물을 편집 하겠지만 우리 의견을 매우 혼란스럽게 만들 것이라고 생각한다. –