Laravel public_html 子文件夹中的项目在使用 .htaccess 重定向时出现问题

Laravel project in subfolder of public_html gives trouble with .htaccess redirect

我已经设置了我的 VPS 服务器并正在尝试设置一个 Laravel 项目。 我有一个 /public_html/ 文件夹,在访问网站 URL.

时会显示 index.html

我希望该网站默认显示给 Laravel project_one,但从昨天开始我用谷歌搜索了 4 个小时,我尝试了 Whosebug 上的所有解决方案,但没有任何效果......我认为我已经尝试了 10 多个我能找到的 .htaccess 版本。

问题:

有谁知道如何在 /public_html/ 中设置 .htaccess 以便它重定向到我的 Laravel 项目?

虽然我需要将我的 Laravel 文件夹上传到:/public_html/project_one/ 但是有更好的位置吗?

我希望主 url 显示 Laravel 项目。所以 www.mainurl.com 是 Laravel 的 project_one/public/index.php 文件。我不希望 /project_one/ 写在 URL!

出于好奇,如果我现在访问:www.mainurl.com/project_one 我会收到 403 禁止。

失败的解决方案

在 /public_html/ 我尝试添加 .htaccess :

DirectoryIndex index.php

#Redirect to /project_one/public if you haven't already and the IP is okay
RewriteCond %{REMOTE_ADDR} ^1\.2\.3\.4*
RewriteCond %{REQUEST_URI} !^/project_one/public
RewriteRule ^(/lucaphoto)?(.+) /project_one/public [L]

#if IP does not match and you ARE in the folder, then Redirect to root
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4*
RewriteCond %{REQUEST_URI} ^/project_one/public
RewriteRule .? / [R=301,L]

这让我感到很奇怪:

  1. On Chrome: 它将我重定向到 www.mainurl.com/project_one -> 然后给我一个 403 禁止错误。**
  2. 在 safari 上: 它无处重定向我但给我这个错误:

Forbidden. You don't have permission to access / on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Laravel 的原始 .htaccess 文件

顺便说一下,Laravel 在 /project_one/public/.htaccess 有一个原始的 .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 ^(.*)/$ / [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}]
</IfModule>

实际的 laravel 应用程序(除了 public 文件夹之外的任何应用程序)不应该是 public,因此不应放在 public 中(public_html ) 文件夹。

我实际上尝试了很多东西来获得与您的设置类似的东西 运行ning。我的结论是 - 仅更改 .htaccess 文件就足以在 public 文件夹中 运行 laravel。

快速设置 laravel 应用程序的最简单解决方案是使用直接指向 public 文件夹的子域。

www.mainurl.com /* points to .../public_html/ */
laravel.mainurl.com /* points to .../laravel/public/ OR ( but not good ) */
/* points to .../public_html/my-project/public/ */

然后您实际需要做的是将您的域/子域的根更改为指向另一个文件夹 - 然后不需要对 .htaccess 进行任何更改。

更新

如果您的网站是 www.example.com 并且您希望 laravel 应用在打开此网站时显示,您有两种选择。

  1. 将 laravels public 文件夹的内容放入 public html 并更改引用以适应 public_html public 个文件夹。

  2. 如果服务器上的文件结构类似于.../var/stuff/.../public_html/ 然后将所有内容上传到 ../var/stuff/my -project 然后转到您的主机界面并进行内部重定向到 ../var/stuff/my-project/public 文件夹,一切都会好起来的,而无需更改 laravel 代码中的任何内容. (除 .env 之外的任何内容)

所以实际问题是您的域指向文件夹 public_html,而不是您应用程序的 public 文件夹。但是请不要将您的应用程序直接放入 public_html,将其平行放置并更改域指向的位置。

如果您向我们提供一些关于您的托管商的信息,我们可能会提供指南