.htaccess htaccess将子文件夹用作根目录
我知道这类问题经常出现。但是经过几个小时的搜索,我什么也没找到 我正在用Slim制作一个网站。然而,在他们的文档中,他们使用.htaccess htaccess将子文件夹用作根目录,.htaccess,.htaccess,我知道这类问题经常出现。但是经过几个小时的搜索,我什么也没找到 我正在用Slim制作一个网站。然而,在他们的文档中,他们使用/public作为根目录,这是我不想要的。我希望网站根目录为/。出于安全考虑,我创建了一个.htaccess重定向http://www.example.com/至http://www.example.com/public/,因此用户无法访问/src和其他文件夹: <IfModule mod_rewrite.c> RewriteEngine On
/public
作为根目录,这是我不想要的。我希望网站根目录为/
。出于安全考虑,我创建了一个.htaccess
重定向http://www.example.com/
至http://www.example.com/public/
,因此用户无法访问/src
和其他文件夹:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ /public [P]
</IfModule>
我必须将代码中的'/'
替换为'/public/'
,页面才能正常工作。我不喜欢那样。要从URI中删除
/public
,我应该向Slim下面的/public/.htaccess
添加什么
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
重新启动发动机
RewriteCond%{REQUEST_URI}:$1^(/.+)/(.*):\2$
重写规则^(.*)-[E=基:%1]
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[QSA,L]
编辑:使用的解决方案
我将vhost重定向到/public/
。我使用的web托管服务支持这一点,因此它是最好的解决方案
多亏了怀特先生。
(不需要
包装器,因为这里的mod_rewrite是强制性的,不是可选的。)
然后,所有URL(指向所有内容)都应该省略/public
子目录
更新:但是,/public/.htaccess
中的以下指令似乎仍在将BASE
环境变量设置到/public
子目录:
您只需注释掉(删除)上述指令并硬编码BASE
env-var:
SetEnv BASE /
然而,目前还不清楚这在Slim框架中是否会成为一个问题。这可能是用来构造URL的(尽管不应该,因为这是文件系统路径,而不是用户访问页面的URL路径,并且可以用PHP轻松计算)
或者,
/public
中的所有内容都应该在您的文档根目录中(即您的公共目录…public\u html
或htdocs
等),然后是/src
(和其他文件夹)将自然位于文档根目录之外,并且不需要附加指令/.htaccess
文件来作为请求的根目录。(虽然不是每个共享服务器都可以让您访问文档根目录之上的内容,但它们应该这样做。)
或者,只需在服务器配置中将
DocumentRoot
更改为/public
。我仍然到处都可以看到/public,而不是正确的重新根目录。我将尝试另一种解决方案,显然我的主机允许。您需要确保/public
不存在于任何URL中,包括指向静态资源(CSS、JS、图像等)的URL。上面是一个内部重写(不是“重定向”),因此它不应该公开/public
子目录。另外,请确保您已清除浏览器缓存。啊,“问题”似乎是BASE
被设置为/public
——这可能是用来构建URL的(从而暴露子目录)。我将更新我的答案。我已经尝试了替代解决方案(将vhost设置为直接指向/public)。它甚至不起作用,URI一直变成“/public/…”。我刚刚试着注释.htaccess中的两行,但是我得到了一个500错误。我甚至不明白为什么裸瘦骨架不能正常工作(直到现在我甚至都没有编写任何代码)。。。替代方案确实有效。我刚刚有一个bug,它会强制使用浏览器缓存。叹息
RewriteEngine On
RewriteRule (.*) /public/$1 [L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
SetEnv BASE /