2016-04-26 5 views
0

持って取り組んでhtaccessを、.htaccessファイルは、特定の国および/または言語をブロックURI

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^NL$ [NC,OR] 
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^BY$ [NC,OR] 
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^UA$ [NC,OR] 
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^RU$ [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (nl) [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (be) [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (uk) [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (ru) [NC] 
RewriteRule ^(.*)$ cap.html [L] 

を除外するが、私はどの国/言語に特定のルートなどのapi.htmlへのアクセス権を与える必要があります。 私は

RewriteCond %{REQUEST_URI} !^/api\.html 

に例外を追加しようとするが、それは動作しません、私は条件の数百を試みたが、6時間あきらめましたが、私が間違ってやってアドバイスしてください。

RewriteEngine On 

    # Exclude countries, forbidden by law 
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^NL$ [NC,OR] 
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^BY$ [NC,OR] 
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^UA$ [NC,OR] 
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^RU$ [NC,OR] 
    RewriteCond %{HTTP:Accept-Language} (nl) [NC,OR] 
    RewriteCond %{HTTP:Accept-Language} (be) [NC,OR] 
    RewriteCond %{HTTP:Accept-Language} (uk) [NC,OR] 
    RewriteCond %{HTTP:Accept-Language} (ru) [NC] 
    RewriteCond %{REQUEST_URI} !^/api\.html 
    RewriteRule ^(.*)$ cap.html [L] 

    RewriteCond %{REQUEST_FILENAME} -s [OR] 
    RewriteCond %{REQUEST_FILENAME} -l [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^.*$ - [L] 
    RewriteRule ^.*$ index.php [L] 

答えて

0

試してみてください。

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^NL$ [NC,OR] 
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^BY$ [NC,OR] 
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^UA$ [NC,OR] 
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^RU$ [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (nl) [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (be) [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (uk) [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (ru) [NC] 
#rewrite everything to "cap.html" except "api.html" 
RewriteRule ^((?!api\.html).*)$ cap.html [L] 
+0

これは正しく動作しません。 –

0

あなたの現在のコードは、論理的なようだが、あなたは一緒に条件をマージし、先頭に最後の条件を移動することで試すことができます。

RewriteCond %{REQUEST_URI} !^/api\.html [NC] 
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(?:NL|BY|UA|RU)$ [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (?:nl|be|uk|ru) [NC] 
RewriteRule^cap.html [L] 
+0

regexp "RewriteCond%{REQUEST_URI}!^/api \ .html [NC]"は動作しますが、次のルールの次のループに問題があります。 PHP –

0

私は解決少し違う方法で問題が発生する api.phpファイルを作成して既存のファイルをスキップするルールを追加しました

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(?:NL|BY|UA|RU)$ [NC,OR] 
RewriteCond %{HTTP:Accept-Language} (?:nl|be|uk|ru) [NC] 
RewriteRule^cap.html [L] 

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [L] 
RewriteRule ^.*$ index.php [L] 
関連する問題