Отрицательное выражение LocationMatch

Мне нужна защита паролем для сайта, только URL-адрес веб-сервиса остается разрешенным для всех.

Это выражение отлично работает в apache, просто нужно повернуть наоборот.

<LocationMatch "^(.*service).*$">
        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /storage/www/xxxxx/.htpasswd
        Require valid-user
</LocationMatch>

Я пробую много много форм, но не работает. Я попробовал это и отлично работает в тестере reguler, но не в apache (2.2)

<LocationMatch "^(?!.*service).*$">

Как можно отрицать это выражение?

Содержимое .htaccess, если имеет значение.

RewriteEngine on
RewriteBase /


# ....
RewriteRule     txxxx/(.*)        index.php?config=main_lite&r=script/xxx/deliverData&url=$1

# rule 1 -- let these requests pass through (S=1 skips the next rule)
RewriteCond %{REQUEST_FILENAME} favicon.(gif|ico) [NC,OR]
RewriteCond %{REQUEST_FILENAME} .+\.(pdf|js|css|txt|jpg|jpeg|gif|png|bmp|ico|swf|html|log|svg|ttf|eot|woff|woff2)$ [OR]
RewriteCond %{REQUEST_URI} rsc/ [OR]
RewriteCond %{REQUEST_URI} index.php$
RewriteRule (.*) - [S=1]

# rule 2 - pass every request to index.php
RewriteRule .* index.php

person Cipo    schedule 14.10.2015    source источник
comment
Я не вижу никакой защиты паролем в вашем .htaccess. Также покажите полный тег <LocationMatch....   -  person anubhava    schedule 14.10.2015
comment
Извините, я добавил часть защиты паролем.   -  person Cipo    schedule 15.10.2015


Ответы (1)


Кажется, что поддержка регулярных выражений Apache слишком ограничена.

Однако вы легко можете «отменить» свое выражение, определив все, что вы хотите для него, в охватывающем предложении (скажем, «Местоположение»), а затем вернувшись к настройкам «по умолчанию» в вашем (неотрицательном) LocationMatch.

Примерно так: https://serverfault.com/questions/591591/apache-locationmatch-regex-behaviour-does-not-seem-correct

person AndreyS Scherbakov    schedule 15.10.2015