1

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

  • 我有一个 laravel 项目:/public_html/project_one/
  • 原始 index.php 位于/public_html/project_one/public/index.php

我希望该网站默认显示给 Laravel project_one,但是从昨天开始,我在 Google 上搜索了 4 个小时,我在 stackoverflow 上尝试了所有解决方案,但没有任何效果......我想我已经尝试了 10 多个版本的 .htaccess 我可以找到.

问题:

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

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

我希望主 url 显示 Laravel 项目。Laravelwww.mainurl.comproject_one/public/index.php文件也是如此。我不想/project_one/被写在网址里!

只是出于好奇,如果我现在访问: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$2 [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. 在 Chrome 上:它会将我重定向到 www.mainurl.com/project_one -> 然后给我一个 403 禁止错误。**
  2. 在 safari 上:它无法将我重定向到任何地方,但给了我这个错误:

禁止。您无权访问此服务器上的 /。

此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

Laravel 的原始 .htaccess 文件

顺便说一句,Laravel 在 .htaccess 中有一个原始的 .htaccess 文件/project_one/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}]
</IfModule>
4

1 回答 1

0

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

我实际上尝试了一些与您的设置类似的东西来运行。我的结论是 - 只有更改.htaccess文件才能让 e 足以在公用文件夹中运行 laravel。

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

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. 将 laravel 公用文件夹的内容放到 public html 并更改引用以适应 public_html 而不是公用文件夹。

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

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

如果您向我们提供有关您的主机的一些信息,我们可能会提供指导

于 2016-07-01T05:23:05.083 回答