通过 Apache 服务 Laravel 项目时,我可以保护 public 的子文件夹吗?
Can I protect a subfolder of public when serving Laravel project via Apache?
我有一个在 Laravel 中制作并通过 Apache 提供的 运行 网络应用程序。
众所周知,Laravel 的应用根目录是 <path_to_project_code>/public
。
我想要一个受保护的文件夹 在 /public
下,为了精确:<path>/public/apidoc
.
我正在尝试这个
<VirtualHost <ip_redacted>:80>
ServerName www.mydomain.com
ServerAlias www.mydomain.com
ServerAdmin info@mycompany.it
ServerPath /www.mydomain.com
DocumentRoot /var/www/www.mydomain.com/public/
DirectoryIndex index.html index.php
<Directory /var/www/www.mydomain.com/public/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Require all granted
</Directory>
<Directory "/var/www/www.mydomain.com/public/apidoc">
AuthType Basic
AuthName "Authentication Required"
AuthUserFile "/etc/htpasswd/.www.mydomain.com.passwd"
Require valid-user
Order allow,deny
Allow from all
</Directory>
CustomLog ${APACHE_LOG_DIR}/vhosts/www-mydomain-com/access.log vhost_combined
ErrorLog ${APACHE_LOG_DIR}/vhosts/www-mydomain-com/error.log
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.mydomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
如此配置,www.domain.com
从....../public
服务,就可以了。
而www.domain.com/apidoc
是从....../public/apidoc
服务的,没关系。
但是访问www.mydomain。com/apidoc不需要http auth,正如我所期望的那样。
添加信息
/public/apidoc的内容是APIDocjs生成的静态html文件。
Nginx 的简单等价物,在开发中,我正在尝试做的是
location /apidoc {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/sites-auth/www.mydomain.com.password;
}
我只需要将这 4 行从 Nginx 移植到 Apache
已解决。
我删除了整个部分
<Directory "/var/www/www.mydomain.com/public/apidoc">
...
</Directory>
比 /public/apidoc/.htaccess
使用此内容创建的
AuthType Basic
AuthName "APIDoc"
AuthUserFile /etc/htpasswd/.www.mydomain.com.passwd
Require valid-user
需要valid-user
我有一个在 Laravel 中制作并通过 Apache 提供的 运行 网络应用程序。
众所周知,Laravel 的应用根目录是 <path_to_project_code>/public
。
我想要一个受保护的文件夹 在 /public
下,为了精确:<path>/public/apidoc
.
我正在尝试这个
<VirtualHost <ip_redacted>:80>
ServerName www.mydomain.com
ServerAlias www.mydomain.com
ServerAdmin info@mycompany.it
ServerPath /www.mydomain.com
DocumentRoot /var/www/www.mydomain.com/public/
DirectoryIndex index.html index.php
<Directory /var/www/www.mydomain.com/public/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Require all granted
</Directory>
<Directory "/var/www/www.mydomain.com/public/apidoc">
AuthType Basic
AuthName "Authentication Required"
AuthUserFile "/etc/htpasswd/.www.mydomain.com.passwd"
Require valid-user
Order allow,deny
Allow from all
</Directory>
CustomLog ${APACHE_LOG_DIR}/vhosts/www-mydomain-com/access.log vhost_combined
ErrorLog ${APACHE_LOG_DIR}/vhosts/www-mydomain-com/error.log
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.mydomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
如此配置,www.domain.com
从....../public
服务,就可以了。
而www.domain.com/apidoc
是从....../public/apidoc
服务的,没关系。
但是访问www.mydomain。com/apidoc不需要http auth,正如我所期望的那样。
添加信息
/public/apidoc的内容是APIDocjs生成的静态html文件。
Nginx 的简单等价物,在开发中,我正在尝试做的是
location /apidoc {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/sites-auth/www.mydomain.com.password;
}
我只需要将这 4 行从 Nginx 移植到 Apache
已解决。
我删除了整个部分
<Directory "/var/www/www.mydomain.com/public/apidoc">
...
</Directory>
比 /public/apidoc/.htaccess
使用此内容创建的
AuthType Basic
AuthName "APIDoc"
AuthUserFile /etc/htpasswd/.www.mydomain.com.passwd
Require valid-user
需要valid-user