如何将子目录重定向到apache Web服务器中的根目录?

如何将子目录重定向到apache Web服务器中的根目录?,apache,silverstripe,Apache,Silverstripe,我的网站可以从mydomain.com/new\u site/test/public/或mydomain.com/访问,但我希望第一个表单重定向到第二个表单。本质上,如何将第一个表单的站点的所有页面重定向到第二个表单的url 目前,这是我的.htaccess: RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ RewriteCond %{REQUEST_URI} !^/new_site/test/public/ Rew

我的网站可以从
mydomain.com/new\u site/test/public/
mydomain.com/
访问,但我希望第一个表单重定向到第二个表单。本质上,如何将第一个表单的站点的所有页面重定向到第二个表单的url

目前,这是我的
.htaccess

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$
RewriteCond %{REQUEST_URI} !^/new_site/test/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /new_site/test/public/$1
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$
RewriteRule ^(/)?$ new_site/test/public/index.php [L]

htaccess的目的是允许通过第二种形式的url访问所有链接。问题是,这不会创建从第一个表单到第二个表单的重定向。

您是说您当前的
.htaccess
工作正常,内容从正确的URL提供,但浏览器不会重定向?如果是,只需将
R=301
添加到
RewriteRule
末尾的标志中即可。这里有很多这样的例子。警告一句-我不熟悉Silverstripe,但是如果它的公共文件位于
public/
,这可能意味着它应该是您的docroot,因为这会阻止访问敏感文件。如果您可以在
/new\u site/test/public/
浏览该站点,这可能意味着
/new\u site/test/
中的文件也会暴露于世界-这很可能包括敏感文件,例如
.env
、具有凭据的配置文件等@Don'tPanic我尝试将其添加到最后一行末尾的[L]中,但那没用。@Don't这是我一直在想的事情。仅限制对公共子目录以外的任何内容的访问就足够了吗?
R
是执行外部重定向的方式-外部意思是浏览器实际发出新请求,并且位置栏中的URL发生更改,或者看看其他例子。您有2个
RewriteRule
s,您可能需要将其添加到这两个规则中。关于安全-您将如何
完全安全地限制访问
?在我看来,唯一的选择是将docroot设置为
public/
——否则就是黑客和自找麻烦。