Сначала правило, которое работает:
DirectoryIndex index.php
ErrorDocument 403 /form.html
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule . - [F,L]
Это означает http://example.com
и http://example.com/index.php
может быть открыт только через POST
.
Теперь проблема
Я добавил этот дополнительный набор правил:
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule . - [F,L]
Теперь я отправляю POST снова, http://example.com
но получаю эту ошибку:
Forbidden
You don't have permission to access / on this server.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Это не имеет смысла, потому что правило НЕ должно отлавливать запросы при index.php
отправке 403, но хорошо, я расширил второе правило следующим образом:
RewriteCond %{REQUEST_URI} !^/form\.html$
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule . - [F,L]
И отправка снова POST на http://example.com не возвращает 500, но я все равно получаю 403 ?!
Обновление 1
Если я удаляю первый набор правил, второй работает один, как и ожидалось. Это означает только http://example.com
, http://example.com/index.php
и http://example.com/form.html
могут быть доступны.
Обновление 2
Если я использую оба набора правил и отправляю свой POST, http://example.com/index.php
я не получаю никаких ошибок ?!
Так что правила мешают, только если я отправил POST на корневой URL. Но почему?