
기본적으로 사용자가 인트라넷과 인터넷을 통해 페이지에 액세스할 수 있기를 바랍니다.
사용자가 인트라넷을 통해 페이지에 액세스하는 경우 브라우저 주소 표시줄에 서버의 인트라넷 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]
그러면 모든 호스트에 대해 위의 작업이 수행됩니다.