2014-10-13 3 views
1

는 말 :하나는 재 작성 규칙을 사용

RewriteRule ^foo/(.+?)/?$ index.php?type=foo&value=$1 [NC,L] 

클라이언트는 여전히 URL을 server.dom/foo/bar/ (은 물론 합리적인 이러한 URL이의이 내부적으로 해결하는 방법에 대한 지식을 가지고 없기 때문에이 문제를보고).

그러나 index.php 페이지가 링크 (<a href="baz">link</a>)를 생성하면 클라이언트는 server.dom/foo/bar/baz으로 해석합니다. index.php 그러나 대부분의 경우 URL이 어디에서 유래했는지에 대한 완전한 지식이 없습니다 ...

첫 번째 아이디어는 "가상"경로의 깊이를 매개 변수로 전달하는 것입니다. 그 결과

RewriteRule ^foo/(.+?)/?$ index.php?type=foo&depth=2&value=$1 [NC,L] 

, index.php 작성해야 : 따라서 재 작성 규칙 같은 것이 될 것이다

<base href="../../"> 

이상 공식적으로 depth 시간 .. (슬래시로 구분). 그러나 어떤 경우에는 .htaccess도 "가상"경로의 깊이에 대한 지식이 없습니다. 또한 다시 쓰기 규칙의 마지막 슬래시 (/)는 선택 사항이며 슬래시가 기록되었는지 여부에 따라 깊이가 다릅니다. 이 ... 크게 RewriteRules의 수를 증가시킬

견고이 상대 링크의 문제를 해결하는 좋은/더 나은 관행은 무엇 (아마도 이 웹 사이트의 부품을 이동한다는 의미에서 강력한하지 않습니다 "휴식"의 링크) ?

+0

절대 경로를 상대 경로로 에뮬레이션하려고합니까? 그리고 RewriteBase와 태그에 대해 알고 있습니까? –

+0

나는 C 매크로를 만들고'/ ext/YOUR_EXT_NAME'에있는 PHP 확장을 만들 것입니다. –

+0

@MichaelLivach : 음, 웹 사이트의 "루트"를 모르므로 절대 링크는 옵션이 아닙니다 ... –

답변

2

예쁜 링크를 사용하는 경우 상대 링크를 사용하지 말 것을 강력히 권합니다. 당신은 링크를 사용할 수 있습니다 base() 기능은 출력 /foo/ 일부 config.php에 정의되어

<a href="<?php base(); ?>baz">link</a> 

.

그런 식으로 연결하면대신에 /foo/baz으로 연결됩니다. 귀하의 웹 사이트를 다른 경로로 옮겨야 만한다면 config.php 안에 base() 기능을 업데이트하십시오. 이것은 많은 CMS 프레임 워크가 Wordpress 또는 CakePHP를 좋아하는 것과 동일합니다.

+1

아마 mis 당신의 예제에서 문자열 "baz"의 시작 부분에 배치 된 따옴표. – TML

+0

네, 맞습니다. 덕분에 @TML : 지금 편집했습니다. – anubhava