【问题标题】:Remove public from URL Laravel 5.3 on shared hosting从共享主机上的 URL Laravel 5.3 中删除公共
【发布时间】:2017-06-28 17:16:58
【问题描述】:

我在共享主机上有 Laravel 5.3 项目,位于以下地址:

www.mydomain.tld/laravel/public/

如何从 URL 中删除“公共”?

www.mydomain.tld/laravel/.htaccess

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]

www.mydomain.tld/laravel/public/.htaccess

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

【问题讨论】:

  • 在 apache.conf 文件中将公用文件夹设为主机的根目录,如果您正在运行 linux,则设为 000-default.conf
  • 我同意@Divyank。有时,主机提供商会提供后台来管理您的虚拟主机,因此您可以将您的domain.tld/public 读取为domain.tld/。我个人使用最后一种方法,因为这取决于我的主机提供商来处理特定的服务器文件以执行此重定向。
  • 这是生产应用程序,管理用户可以使用的完全在线应用程序。我无法更改 apache.conf 文件,因为我的网站位于根位置 (www.mydomain.tld)
  • 好的,在我的本地检查后,我会在下面放一个解决方案
  • 我在这里问了稍微不同版本的问题stackoverflow.com/questions/64305191/…

标签: php .htaccess laravel laravel-5.3


【解决方案1】:

从您的公共文件夹中复制内容并将它们放入您的根文件夹中

打开 index.php 并修改以下行

require __DIR__.'/../bootstrap/autoload.php';

require __DIR__.'path_to_laravel_folder/bootstrap/autoload.php';

&

$app = require_once __DIR__.'/../bootstrap/app.php';

$app = require_once __DIR__.'path_to_laravel_folder/bootstrap/app.php';

【讨论】:

    【解决方案2】:

    这种情况的最佳方法是使用符号链接。通过 SSH 登录到您的网络服务器。将您的目录更改为您的网站。将其更改为父级。使用 ln 命令创建符号链接。将 public_html 替换为您的文件夹名称(可能有点像您的网站名称或 www 文件夹)。

    ln -s public /your/full/path/public_html(使用密码获取完整路径)

    如果 SSH 不适用于您的主机,并且没有其他方法来创建符号链接或编辑 apache.conf 文件,我建议您将主机更改为另一个。将整个应用程序提供给全世界是非常糟糕的做法。

    【讨论】:

      【解决方案3】:

      在根文件夹中制作 .htaccess 文件:

      <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteRule ^(.*)$ public/$1 [L]
      </IfModule>
      

      【讨论】:

        【解决方案4】:

        第一步非常简单,您只需重命名文件名。您必须在 laravel 根目录中将 server.php 重命名为 index.php。

        其次,您必须复制 .htaccess 文件并将其放在 laravel 根文件夹中。您只需从公用文件夹中复制 .htaccess 文件,然后更新以下代码:

        选项 -MultiViews -索引

        重写引擎开启

        处理授权标头

        RewriteCond %{HTTP:Authorization} .

        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

        如果不是文件夹,则重定向尾部斜杠...

        RewriteCond %{REQUEST_FILENAME} !-d

        RewriteCond %{REQUEST_URI} (.+)/$

        重写规则 ^ %1 [L,R=301]

        处理前控制器...

        RewriteCond %{REQUEST_URI} !(.css|.js|.png|.jpg|.gif|robots.txt)$ [NC]

        RewriteCond %{REQUEST_FILENAME} !-d

        RewriteCond %{REQUEST_FILENAME} !-f

        重写规则 ^ index.php [L]

        RewriteCond %{REQUEST_FILENAME} !-d

        RewriteCond %{REQUEST_FILENAME} !-f

        RewriteCond %{REQUEST_URI} !^/public/

        重写规则 ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]

        【讨论】:

          猜你喜欢
          • 2017-02-27
          • 1970-01-01
          • 2015-06-09
          • 2017-05-22
          • 2023-02-08
          • 2016-06-09
          • 2019-03-30
          • 2013-03-13
          • 2015-04-06
          相关资源
          最近更新 更多