2012-12-16 3 views
2

저는 웹 세상에서 멍청한 사람입니다. 사과드립니다. 나는 다른 곳에서 발견 된 많은 것들을 시도했지만, 필요. 그리고 Apache 문서는 ... 너무 많이 완성되었습니다..htaccess 하위 폴더로 리디렉션하고 이름을 제거하십시오.

기본적으로 내 도메인을 하위 폴더로 리디렉션하고 싶습니다. 나는 이것을위한 쉬운 솔루션을 발견했다.

http://www.foo.com/ 
http://foo.com/ 

/bar로 리디렉션 다음과 같은 I있어 예상 된 결과 사용 http://foo.com/

로 표시해야합니다

RewriteEngine on 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^www\.foo.com$ 
RewriteRule ^/?$ "http\:\/\/foo.com" [R=301,L] 
RewriteRule ^((?!bar/).*)$ bar/$1 [NC,L] 

을하지만, 명시 적으로 때 표시되지는 파일 이름으로 나는 또한뿐만 아니라 하위 폴더를 원하는 입력 : 예 :

http://www.foo.com/index.html 
http://foo.com/index.html 
http://wwww.foo.com/bar 
http://foo.com/bar 
http://wwww.foo.com/bar/index.html 
http://foo.com/bar/index.html 

모두로 표시되어야합니다

http://foo.com/ 

이게 가능합니까?

분명히 .htaccess를 사용하고 있기 때문에 가상 호스트에 있습니다.

감사

펠리페가 말한대로
+1

첫 번째 리디렉션 규칙에서 URI (예 :/bar/index.html)가 제거되므로 마지막 다시 쓰기 규칙에 추가 할 내용이 없습니다. 당신이 묻는대로 그것을 일반화하는 것이 가능하다고 나는 생각하지 않는다. '/ bar'가 명시 적으로 규칙에 추가했기 때문입니다. –

답변

0

당신이 R = 301 리디렉션 그렇게 할 때 정보가 손실 때문에, 그것은 정말 불가능 :이 이전 요청없이 메모리, 완전히 새로운 요청을 시작합니다 같은 하드 리디렉션합니다.

물론 비슷한 일을하는 방법이 있습니다. 가장 쉬운 방법은 쿼리 문자열에 원래 요청을 넣는 것입니다 (here은 mod_rewrite가 쿼리 문자열과 함께 작동하는 방법에 대한 좋은 개요입니다). 물론 검색어 문자열이 URL에 표시되지만 대부분의 최신 브라우저는 검색 주소창에 검색어 문자열을 숨기므로 목표가 심미적 인 경우이 방법을 사용할 수 있습니다.

URL에 원래 검색어를 표시하지 않으려면 CO flag (here은 쿠키 조작에 대한 좋은 예입니다)을 사용하여 쿠키를 사용할 수 있습니다. 여하튼 원래 요청에 대한 정보는 하드 리디렉션으로 전달되어야합니다.

하지만 어쨌든 가장 중요한 것은 왜 이런 식으로하고 싶은가요? 인간과 로봇을 똑같이 혼동시킬 수 밖에 없습니다. 프레임이 유행 일 때 많은 페이지가 이렇게 돌아 갔고, 북마크가없고 콘텐츠에 쉽게 연결할 수 없으며 Google 결과에서 '브라우저가 프레임을 처리 할 수 ​​없습니다'라는 메시지가 표시됩니다. 다시로드하지 않아도되고 엉뚱한 뒤로 버튼, 오 소년, 그 날들이었다).

콘텐츠가 html 인 경우 평범한 오래된 iframe을 사용하여 효과를 얻을 수 있습니다 (단, 진심으로 권장합니다).