在我的本地服务器的webroot中,我尝试在它的self目录中安装Bedrock:
|- htdocs
|- bedrock
|- web
使用我编写的.htaccess文件,我可以访问web目录,从而启动我的应用程序:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301]
RewriteCond %{HTTP_HOST} ^(www.)?example.local$
RewriteCond %{REQUEST_URI} !^/bedrock/web/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /bedrock/web/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.local$
RewriteRule ^(/)?$ bedrock/web/index.php [L]
但是,我希望避免使用以下URL访问基岩目录:example.local/bedrock
.
我可以用Apache的rewrite模块来实现这个功能吗?或者我必须在基岩目录中添加一个带有deny from all
的.htaccess?
1条答案
按热度按时间kiayqfof1#
您可以阻止对
/bedrock
子目录的直接访问,但仍然允许在内部将请求重写到该目录,方法是在现有规则 * 之前 * 添加以下内容:如果客户端直接请求
/bedrock
或/bedrock/<anything>
,则上述代码将返回“403 Forbidden”。通过检查
REDIRECT_STATUS
环境变量是否为 empty,我们可以确保该规则仅应用于直接请求(而不是重写请求-在文件的后面)。REDIRECT_STATUS
env在初始请求时为空,但在第一次成功重写后设置为200
(如在200 OK状态中)。...还是我必须在基岩目录中添加一个.htaccess并拒绝来自所有的访问?
这将阻止 * 所有 * 请求,包括您的内部重写。
您应该在前两个规则中包含
L
标志。您只在最后一个规则中包含了L
标志(此处并不严格要求)。在最后一个规则中不需要捕获组。
^/?$
(或者甚至.htaccess
中的^$
)就足够了。