Существует CGI-скрипт, который предоставляет некоторый API для наших клиентов. Синтаксис вызова:
script.cgi?module=<str>&func=<str>[&other-options]
Задача состоит в том, чтобы создать разные правила аутентификации для разных модулей.
По желанию, было бы здорово иметь красивые URL.
Моя конфигурация:
<VirtualHost *:80>
DocumentRoot /var/www/example
ServerName example.com
# Global policy is to deny all
<Location />
Order deny,allow
Deny from all
</Location>
# doesn't work :(
<Location /api/foo>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
RewriteEngine On
# The only allowed type of requests:
RewriteRule /api/(.+?)/(.+) /cgi-bin/api.cgi?module=$1&func=$2 [PT]
# All others are forbidden:
RewriteRule /(.*) - [F]
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 5
ScriptAlias /cgi-bin /var/www/example
<Directory /var/www/example>
Options -Indexes
AddHandler cgi-script .cgi
</Directory>
</VirtualHost>
Ну, я знаю, что проблема заключается в порядке обработки этих директив. <Location>
s будет обработано после того, как mod_rewrite выполнит свою работу. Но я верю, что есть способ изменить это. :)
Использование стандартных директив Order deny,allow
+ Allow from <something>
является предпочтительным, поскольку оно обычно используется в других местах, подобных этому.
Спасибо за ваше внимание. :)