【发布时间】:2018-12-06 22:14:04
【问题描述】:
情况:这是文件夹结构的webproject。
- 万维网
- 2015
- 2016
- 2017
- 2018
- 当前
每个文件夹代表当年的网站,在“当前”文件夹中是您访问 www.mydomain.com 时应该显示的网站。 目标是,如果您访问 www.mydomain.com/2017,您会看到 2017 年的网站。
根文件夹中有一个 .htaccess 文件,可确保如果您导航到“/”,您将被重定向到当前文件。
我正在为必须放入“2017”文件夹(这是一个 laravel 应用程序)中的 .htaccess 文件而苦苦挣扎。
www文件夹中的.htaccess文件
<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteEngine on
RewriteRule ^(.*)$ current/$1 [L]
</IfModule>
2017文件夹中的.htaccess文件
<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteBase /2017
RewriteEngine on
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
当前结果:当我转到 www.mydomain.com/2017 时,我转到 2017 文件夹,但它转到 2017 年的“2017”页面。为了测试这一点,我刚刚在我的 web.php 路由中添加了这个:
Route::get('/{page}', array('as'=>'renderpage',function ($page) {
dd('I am here and the page you request is '.$page);
}));
导致: "我在这里,您请求的页面是 2017"
长话短说:如何从 .htaccess 文件的 url 中删除“2017”,以便 laravel 将 www.mydomain.com/2017 解释为 2017 文件夹的根目录。最好在 2017 文件夹中的 .htaccess 文件中完成。
编辑: 我将2017文件夹中的.htaccess文件改成这样:
<IfModule mod_rewrite.c>
Options +SymLinksIfOwnerMatch
RewriteBase /2017
RewriteEngine on
RewriteRule ^(/.*|)$ public/$1 [L,NC,R=301]
</IfModule>
现在它可以工作了,除了您现在看到的网址 www.mydomain.com/2017/public 如何从 url 中删除“public”?
【问题讨论】:
-
如果我理解你的话,你希望当有人请求
www.mydomain.com时,它应该直接进入2017文件夹并进一步执行? -
@vivek_23 不,我在那种情况下解释错了......如果你去 www.mydomain.com 你应该去“当前”(这有效)。如果你去 www.mydomain.com/2017 你应该去 2017。这也是正在发生的事情,但实际上你去 2017 文件夹内的“2017”页面,它应该去 2017 的“根”页面.
-
@AndriesHeylen 每当谈到 Laravel 路由时,您都无法将请求解释为文件夹。这是一个 URL 路径,与文件夹无关。您的
Route::get('/{page}'与www.mydomain.com/2017完美匹配,{page}在此处变为2017。但是,您可以在 Laravel 控制器或闭包中处理值,即page值并正确重定向用户。 -
@AndriesHeylen 另外,为什么
2016,2017等在current之外? -
@vivek_23 因为到目前为止我们都是这样做的,每年都会将“当前”文件夹重命名为去年,并且在当前文件夹中安装一个新网站。
标签: php laravel apache .htaccess