HTTP_HOST를 기반으로 URL을 다시 작성합니다.

HTTP_HOST를 기반으로 URL을 다시 작성합니다.

기본적으로 사용자가 인트라넷과 인터넷을 통해 페이지에 액세스할 수 있기를 바랍니다.

사용자가 인트라넷을 통해 페이지에 액세스하는 경우 브라우저 주소 표시줄에 서버의 인트라넷 IP를 입력하여192.168.x.x.

하지만 사용자가 인터넷을 통해 페이지에 액세스하면 서버의 공용 IP를 입력할 수 있으므로 URL을 서버의 공용 IP로 다시 작성하겠습니다.

이것을 시도했지만 페이지가 표시됩니다.제대로 리디렉션되지 않음.

RewriteEngine   On
RewriteBase     /mypath/
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteCond     %{HTTP_HOST}        !192.168.0.1
RewriteRule     ^(.*)$          http://<public.ip.of.server>/mypath/$1/ [L,R=301]
RewriteCond     %{HTTP_HOST}        !<public.ip.of.server>
RewriteRule     ^(.*)$          http://192.168.0.1/mypath/$1/   [L,R=301]

나도 이것을 시도했지만 페이지가 나타납니다.500 내부 서버 오류.

<If "%{HTTP_HOST} == '192.168.0.1'">
RewriteEngine   On
RewriteBase     /mypath/
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$          http://192.168.0.1/mypath/$1/   [L,R=301]
</If>
<If "%{HTTP_HOST} == 'public.ip.of.server'">
RewriteEngine   On
RewriteBase     /mypath/
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$          http://<public.ip.of.server>/mypath/$1/ [L,R=301]
</If>

내가 뭔가 잘못하고 있는 걸까요?

답변1

아파치 2.2.3을 사용하고 있습니다

그만큼<If>지시문은 Apache 2.4 핵심의 일부입니다.. 이러한 지시문을 2.2에 넣으면 500 서버 오류가 발생합니다. 무엇을 하려는지 전혀 명확하지 않지만 <If>블록을 간단한 RewriteCond.

여기서 중요한 개념 RewriteCond바로 다음에만 적용 RewriteRule지시문에는 다른 항목에는 적용되지 않고 해당 항목에만 적용됩니다. 따라서 여러 규칙에 적용하려면 조건을 복제해야 합니다.

RewriteEngine   On
RewriteBase     /mypath/

RewriteCond     %{HTTP_HOST} ^192.168.0.1$
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$          http://192.168.0.1/mypath/$1/   [L,R=301]

RewriteCond     %{HTTP_HOST} ^public.ip.of.server$
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$          http://<public.ip.of.server>/mypath/$1/ [L,R=301]

하지만 비트를 사용하지 않고 리디렉션할 수 있으므로 이 모든 것을 제거할 수 있습니다 http://hostname.

RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_URI}      !(.*)/$
RewriteCond     %{REQUEST_METHOD}   GET
RewriteRule     ^(.*)$  /mypath/$1/   [L,R=301]

그러면 모든 호스트에 대해 위의 작업이 수행됩니다.

관련 정보