2013-07-09 4 views
1

웹에서 많은 기사를 작성하지 않아도 URL을 다시 작성하는 개념을 사용할 수 없습니다.URL 재 작성 방법이 정확하지 않음

보고 싶은 웹 페이지의 절대 경로가 www.abc.com/games.php?game=1이라고 가정합니다. www.abc.com/games/game/1 링크를 위의 페이지로 리디렉션하고 싶습니다.

이 규칙을 적용하지 않겠습니까?

RewriteRule games/game/([^/\.]+)/?$ games.php?game=$1 [L] 

.htaccess file

RewriteEngine On 
RewriteBase/
RewriteRule games/game/(\d+)/?$ games.php?game=$1 [L, QSA] 

답변

2

"않을까요이 규칙 사용할 수 있습니까?"

RewriteRule games/game/([^/\.]+)/?$ games.php?game=$1 [L] 

예, 그것은 작동합니다. 그러나 정규 표현식을 단순화하고 향상시킬 수 :

  1. (...) - 올바른 즉 우리가 필요로하는 기능 - 괄호 안의 문자가 캡처됩니다.

  2. [^/\.] - 문자 클래스와 일치하지 않는 모든 문자와 일치합니다. 즉 슬래시가 아닌 임의의 기호 /이며 점이 아닙니다. - 이것은 완전히 정확하지 않습니다. 임의의 숫자를 매치 할 필요가 있습니다 : \ d +. 그러나 정규 표현식은 비 디지털 기호와도 일치합니다.

    ^games/game/(\d+)/?$ 
    

    내가 시작 부분에 캡 기호를 추가, 그래서 우리는 할 수 있습니다 -

  3. /?$

그래서 문자열의 끝에서 가능 슬래시, 우리는이처럼 정규 표현식을 다시 작성할 수 있습니다 URL은 "게임"에서 시작해야합니다.

이 사이트는 유용 할 수 있습니다

http://www.regular-expressions.info/

+0

고마워요. 이것은 효과가 있었다. 페이지가 열렸지 만 또 다른 문제가 있습니다. 'GET' 변수에 아무 것도 전달되지 않았습니다. –

+0

리디렉션이 맞습니까? 어쩌면 $ 1이 사용되지 않았을 수도 있습니다.내 컴퓨터를 보자. – user4035

+0

@NavneetSaini hm, 간단한 PHP 스크립트를 만들었습니다 : - 게임 변수가 전달됩니다. $ _GET과 동일합니다 : 확인하십시오. – user4035

0

당신은 쿼리 문자열을 다루는 규칙을 다시 작성되어, 당신은 "QueryString을 추가]"옵션이 필요합니다.

qsappend | QSA '(쿼리 문자열 APPEND는)이 플래그는 대신 교체의, 기존의 문자열로 대체 문자열의 쿼리 문자열 부분을 추가하기 위해 재 작성 엔진을 강제로. 에 다시 쓰기 규칙을 통해 쿼리 문자열에 더 많은 데이터를 추가하려는 경우에 사용하십시오.

그래서, 당신은이를 사용해야합니다

RewriteRule games/game/(\d+)/?$ games.php?game=$1 [L, QSA]

지금 당신은 당신의 처리 페이지에서 $_GET['game']을 acccess 수 있습니다.

+0

하지만 이렇게하면 내부 서버 오류가 발생합니다. 정확한 '500 내부 서버 오류'. –

+0

음, 이전 정규 표현식 (@ user4035 기준)을 사용할 수 있습니까? 다시 쓰기 규칙 끝에 대괄호 안에 QSA 매개 변수를 추가하십시오. 여전히 내부 서버 오류가 발생합니까? – vitozev

+0

그래, 아직도 그래. –