.htaccess에서 <If> 지시문을 어떻게 사용해야합니까? 페이지 http://httpd.apache.org/docs/trunk/mod/core.html#if를

내 .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


답변