结合使用Altorouter和.htpasswd基本身份验证

时间:2020-10-25 13:25:19

标签: php api rest altorouter

我的index.php

require_once 'altorouter.php';
$router = new Router();

$router->map('GET', '/', function() {
    require 'home.php';
}, 'home');

$router->map('GET|POST', '/dashboard/[*:serial]?', function($serial) {
    require 'dashboard.php';
}, 'dashboard');

$match = $router->match();

if (is_array($match)) {

    header("HTTP/1.1 200 OK");
    call_user_func_array( $match['target'], $match['params'] );
        
}

else {

    header('Content-type: text/javascript');
    header("HTTP/1.1 400 Bad Request");
    echo json_encode(array('message' => 'Please check validity of methods and URL slugs.', 'debug' => ($_SERVER['REQUEST_URI'])), JSON_UNESCAPED_UNICODE, JSON_UNESCAPED_SLASHES);

}

Apache站点可用的ssl conf文件

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        <Directory /var/www/html/>
            #Options Indexes FollowSymLinks
            #AllowOverride All
            #Require all granted
            AuthType Basic
            AuthName "Restricted Content"
            AuthUserFile /etc/apache2/.htpasswd
            Require valid-user
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

        ServerName example.com
        Include /etc/letsencrypt/options-ssl-apache.conf
        ServerAlias www.example.com
        SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    </VirtualHost>
</IfModule>

.htaccess

RewriteEngine on

# Autorouter
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

# Enable last slash in URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)/$ /$1 [R=301,L]

启用基本身份验证后,home.php可以访问(登录后),而dashboard.php无法访问。

        <Directory /var/www/html/>
            AuthType Basic
            AuthName "Restricted Content"
            AuthUserFile /etc/apache2/.htpasswd
            Require valid-user
        </Directory>

https://www.example.com/dashboard/abcd123/返回404

Not Found

The requested URL was not found on this server.

禁用基本身份验证后,一切正常。

        <Directory /var/www/html/>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

https://www.example.com/dashboard/abcd123/返回200和页面。

是否可以将Altorouter与Basic Auth结合使用?为什么'/'路由不受身份验证影响,而其他路由受此影响?

1 个答案:

答案 0 :(得分:0)

显然,df1 <- read.csv("Data_exmpl.txt", fill = TRUE, header = FALSE) 需要启用。现在路由成功了。