2016-04-26 7 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

Try:

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] 
Смежные вопросы