내 .htaccess 파일에서 Apache의 If 지시문을 사용하여 조건문을 추가하려고합니다.
이 페이지 http://httpd.apache.org/docs/trunk/mod/core.html#if를 참조 했지만 그다지 정교하지 않고 많은 예제를 제공합니다. 불완전한 두 가지 예는 다음과 같습니다.
<GET, HEAD, OPTIONS에 % {REQUEST_METHOD} 인 경우>
과
<If "$ req {Host} = ''">
그래서 이것을 내 .htaccess 파일에 추가하려고했습니다.
<% {SERVER_PORT}가 GET, HEAD, OPTIONS 인 경우> # 아무것도 아직 없습니다 </ If>
그러나 페이지를로드하려고 할 때 오류 500이 계속 발생 합니다. 이것은 내 로컬 설치에 있으며 이전에 제대로 작동했습니다 (또는 해당 코드를 제거하면). 나는 믿습니다 AllowOverride All
세계적으로 설정하고, 지시어가의 .htaccess에 존재하도록해야하는 경우에 대한 상황 ( “: 주 서버 설정, 가상 호스트, directory, .htaccess”).
누군가 <If> 지시문을 올바르게 사용하는 방법에 대한 몇 가지 예 또는 왜 그것이 효과가 없는지에 대한 지침을 줄 수 있습니까?
감사!
답변
<If>
지시어는 아파치에서만 사용할 수 있습니다 2.4+하지 2.2 또는 이전 버전.
http://httpd.apache.org/docs/2.4/mod/core.html#if
2.2에없는 설명서 :
http://httpd.apache.org/docs/2.2/mod/core.html#if
답변
<If>
는 Apache 2.4 이상에서만 사용할 수 있으므로 먼저 해당 버전이 있는지 확인하십시오.
예
# Compare the host name to example.com and redirect to www.example.com if it matches
<If "%{HTTP_HOST} == 'example.com'">
Redirect permanent "/" "http://www.example.com/"
</If>
<If "%{HTTP_HOST} =~ /regex/">
SecFilterEngine Off
SecFilterScanPOST Off
</If>
<If "%{REQUEST_URI} =~ m#/regex/including/slashes/#">
SecFilterEngine Off
SecFilterScanPOST Off
</If>
대안 <If>
Apache 2.2에서 조건문을 수행하는 데 여전히 몇 가지 다른 솔루션이 있습니다.
-
다음을 통해 환경 변수를 설정할 수 있습니다.
- 아파치 설정
SetEnvIf
- mod_rewrite ‘s
RewriteMatch
-
그런 다음을 사용하여 조건문을 수행 할 수 있습니다
<IfDefine MyEnvironmentVar> ... </IfDefine>
예:
# Set environment variable if we're on staging site
SetEnvIf Host staging ROBOTS_NOINDEX
# Set environment variable if we're within a specific folder
SetEnvIf Request_URI ^/app/webroot/files/ ROBOTS_NOINDEX
# Send custom header if environment variable is set
Header set X-Robots-Tag "noindex" ENV=ROBOTS_NOINDEX