Пользовательская страница аутентификации - Apache mod_auth_form - Ошибка 405 Метод не разрешен

У меня проблемы с попыткой заставить работать мод apache auth_form.

У меня есть поддомен, который я хочу защитить и использовать для различных функций администрирования на моем веб-сайте.

Когда я отправляю форму авторизации, я получаю:

Method Not Allowed

The requested method GET is not allowed for the URL /admin/index.html.

Я следовал в моих силах инструкциям в этой документации здесь:

http://httpd.apache.org/docs/current/mod/mod_auth_form.html

и здесь:

http://httpd.apache.org/docs/current/mod/mod_session.html

Я также использую Apache 2.4.9 со всеми необходимыми модулями, чтобы это работало.

Итак, я настроил поддомен следующим образом:

/index.html (Public root / auth form)
/admin/index.html (The contents of the folder i wish to protect)

/index.html содержит следующее:

<form method="POST" action="/admin">
    User: <input type="text" name="httpd_username" value="" />
    Pass: <input type="password" name="httpd_password" value="" />
    <input type="submit" name="login" value="Login" />
</form>

Для блока Vhost, который управляет поддоменом, я добавил следующее (отмечая, что я включаю GET и POST для этого домена, поскольку по умолчанию они отключены):

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName mydomain.com
    ServerAlias admin.mydomain.com

    DocumentRoot /var/www/mydomain.com/admin/

    <Directory /var/www/mydomain.com/admin/>
        <LimitExcept GET POST>
             Require all denied
        </LimitExcept>
        Options -ExecCGI -FollowSymLinks -Includes -Indexes -MultiViews
        Require all granted
    </Directory>

    <Location /admin>
        SetHandler form-login-handler
        AuthFormLoginRequiredLocation http://admin.mydomain.com/index.html
        AuthFormLoginSuccessLocation http://admin.mydomain.com/admin/index.html
        AuthFormProvider file
        AuthUserFile /var/www/mydomain.com/admin_inc/.htpasswd
        AuthType form
        AuthName realm
        Session On
        SessionCookieName session path=/private;domain=admin.mydomain.com;httponly;secure;
        SessionCryptoPassphrase secret
    </Location>

</VirtualHost>

В журнале ошибок Apache я получаю следующее:

[Mon May 19 10:26:38.xxxxxx 2014] [auth_form:error] [pid xxxxx] [client xxxxxx:xxxxx] AH01811: the form-login-handler only supports the POST method for /admin/index.html, referer: http://admin.mydomain.com/

Если бы кто-нибудь мог объяснить мне, что я сделал здесь неправильно, чтобы создать эту ошибку, это было бы очень признательно, спасибо!

2 ответа

Я, наконец, получил эту работу, и я ступил на этот вопрос, пытаясь найти решение своих проблем.

Вы получаете эту ошибку, потому что ваш вызов перехватывается обработчиком form-login-handler, который поддерживает только POST.

Хитрость в том, что SetHandler Директива должна быть активной только для URL, который будет использоваться в качестве действия формы аутентификации. Все другие защищенные ресурсы должны использовать ту же конфигурацию, но без этого обработчика.

Вот рабочая конфигурация:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/example.com/

    <Location /admin>
        # Protect all resources under /admin with form auth. Note that the login form is NOT under /admin : not sure this is required, but this is how I got it working
        AuthFormLoginRequiredLocation http://www.example.com/index.html
        AuthFormLoginSuccessLocation http://www.example.com/admin/index.html
        AuthFormProvider file
        AuthUserFile /var/www/example.com/.htpasswd
        AuthType form
        AuthName realm
        Session On
        SessionCookieName session path=/private;domain=www.example.com;httponly;secure;
        SessionCryptoPassphrase secret
    </Location>
    <Location /admin/dologin>
        # Since this location is a sub-path of the previous one, it inherits all parameters above
        # It will be the only URL to be able to process form logins, and the only one to require POST
        SetHandler form-login-handler
    </Location>

</VirtualHost>

Конечно, вам нужно установить свой атрибут действия в форме для URL обработчика входа:

<form method="POST" action="/admin/dologin">
    User: <input type="text" name="httpd_username" value="" />
    Pass: <input type="password" name="httpd_password" value="" />
    <input type="submit" name="login" value="Login" />
</form>

Надеюсь, это кому-нибудь поможет (хотя этой теме 4 года!:))

Вы каким-то образом отправляете учетные данные для входа каким-либо методом, который не является POST¹. Может быть, еще раз проверьте свою форму входа?

Code http://code.ohloh.net/file?fid=Pwx9mfavxhieWn8XSiBldWz63zI&cid=h1J7pf7LYjw&s=&fp=305270&mp&projSelected=true#L1127

Другие вопросы по тегам