2014-09-03 2 views
0

나는 PHP 사이트를 가지고 있고 URL은 다음과 같이 표시됩니다URL 파일 이름의 일부로 쿼리 문자열을 다시 작성 하시겠습니까?

http://www.example.com/cheap-call-single.php?country=ALBANIA 

내가 원하는 그것을 다시 쓰기로 표시 :

http://www.example.com/cheap-international-calls-ALBANIA.php 

나는 많은 단지 발전기를 검색하고 그들은 모두 한 다음과 같이 말하십시오 :

RewriteEngine On 
RewriteRule ^cheap-international-calls-([^/]*)\.php$ /cheap-call-single.php?country=$1 [L] 

그러나 이것은 나를 위해 작동하지 않습니다.

누군가 올바른 구문으로 나를 도와 줄 수 있습니까?

+0

'하지만 이것은 작동하지 않습니다.'무엇이 작동하지 않습니까? 변환하지 않은 첫 번째 URL에 액세스하거나 두 번째 URL에 액세스 할 때 작동하지 않습니다. 두 번째 URL에 액세스 할 때 게시 한 코드가 작동해야합니다.위의 어느 것도 우리가 크리스탈 볼을 가지고 있지 않기 때문에 가능한 한 서술 적이라는 것을 설명하지 못한다면 ... – Prix

+0

위의 내용을 내 폴더의 루트에있는 htaccess 파일에 붙여 넣었습니다. URL이 표시되는 방식에는 아무런 차이가 없습니다. –

답변

0

당신이 표시하는 rewriteRule은 반전됩니다. 긴 양식의 수신 URL을 가져 와서 쿼리 문자열 버전 (?)으로 변환합니다. "나는대로 표시, 그것을 다시 할 :"

경우]

표시하고 다시 쓰기는 일반적으로 다른 것들

이제 문제는 당신이 말할 때 무엇을 의미합니까입니다 '디스플레이'당신이 자신의 브라우저에서 사용자가 볼 수있는 URL입니다 : 수신 된 HTML이 올바른 표시를 포함하도록

  • 는 응용 프로그램에서 URL을 작성하는이 방법을 밀어,이 mod_rewrite를 함께 할 수 없다
  • 선택적으로 mod_rewrite로 HTTP 리다이렉션을 수행 할 수 있습니다. 따라서 이전 구문 (cheap-call-single.php?country=ALBANIA)을 감지하면 사용자를 올바른 방향으로 리디렉션하고 브라우저에서 요청을 다시 실행합니다. 그러면 서버에 cheap-international-calls-ALBANIA.php 파일이 있어야합니다. 서버, 그렇지 않으면 마지막 404)
  • 서버에이 파일이 없으면 (즉, 가지고있는 파일은 cheap-call-single.php입니다.) 노출 된 rewriteRule이 올바로 작동하고 1 단계로 돌아 가면 오른쪽에 표시해야하는 응용 프로그램입니다 HTML 쪽의 URL. 당신이 정말로 cheap-international-calls-ALBANIA.php이 있고 응용 프로그램이 쿼리 문자열 매개 변수를 기반으로,이 파일에 cheap-call-single.php을 사용하여 들어오는 요청을 다시 할 경우

지금, 당신은 몇 가지 문제가 있습니다. 요청의 쿼리 문자열 부분에 규칙을 작성하는 것은 항상 복잡하며 쿼리 문자열 인수는 순서에 관계없이 urlencoding으로 작성 될 수 있습니다. 기본적으로 rewriteRules는 쿼리 문자열 부분을 사용하지 않습니다.

는 뭔가 같은 :

RewriteCond %{REQUEST_FILENAME} cheap-call-single\.php [NC] 
RewriteCond %{QUERY_STRING} (^|&|%26|%20)country(=|%3D)([^&]+) [NC] 
RewriteRule .* /cheap-international-calls-%3.php [L,R] 

테스트되지 않은 (확실하지 \. 용), 아직 urlencoded를 할 것이다 사실에게 국가 단어의 각 문자를 관리하지, 그리고의 upcase를 관리하지 국가 이름. 대문자로 변환하려면 RewriteMap이 필요합니다. 하지만 이미 내 두통이있어,이게 진짜 필요한거야?

+0

자세한 답장을 보내 주셔서 감사합니다. 변경하려는 것은 검색 엔진 최적화 (SEO)에 도움이되는 표시 URL입니다. 내가 무엇을 요청 했어야했다 나는 PHP 사이트를 가지고 있으며 URL은 다음과 같이 표시됩니다 : http://www.example.com/cheap-call-single.php?country=ALBANIA 표시하고 싶습니다. 다음과 같이 입력하십시오 : http://www.example.com/cheap-international-calls-ALBANIA.php –

+0

@Lee Cokerill에 대한 올바른 구문을 알려주십시오. 대답에 명시된대로 이것이 작업입니다. mod_rewrite가 아닌 PHP 애플리케이션의 경우, 링크 URL을 생성 할 때 디스플레이가 관리됩니다. 그리고 이미 가지고있는 rewriteRule은 들어오는 쿼리를 쿼리 문자열 형식으로 '다시 작성'해야합니다. – regilero

+0

저의 이해 부족을 용서해주십시오. 그래서 seo 순위를 지원하기 위해 url 디스플레이를 변경하기 위해 htaccess에서 다시 쓸 수는 없습니까? 현재 url은 디스플레이가 바뀌고 싶기 때문에 디스플레이가 더 좋을 것입니다. 디스플레이를 다시 써서이 작업을하고 싶었습니다. 시간과 도움 감사합니다. –