首页 > 解决方案 > 文件夹中的 Laravel .htaccess 配置

问题描述

情况:这是文件夹结构的webproject。

每个文件夹代表当年的网站,在“当前”文件夹中,它是您访问 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 我如何从网址中删除“公共”?

标签: phplaravelapache.htaccess

解决方案


也许这是在 laravel 中正确的做法:

您可以使用更改控制器或路由中的根目录

$this->app->bind('path.public', function() {
  return base_path().'/public_html';
});

我猜你可以在那里插入一个绝对路径。

查看

https://laravel.com/docs/5.7/helpers#method-public-path

https://laravel.com/docs/5.7/helpers#method-base-path


推荐阅读