在public_html子文件夹中的Laravel项目会给.htaccess重定向

时间:2016-07-01 01:49:16

标签: .htaccess laravel redirect vps public-html

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

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

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

问题:

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

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

我希望主网址显示Laravel项目。所以www.mainurl.com是Laravel的project_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上:它无处重定向我,但却给了我这个错误:
  3.   

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

         

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

    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 ^(.*)/$ /$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>
    

1 个答案:

答案 0 :(得分:0)

实际的laravle应用程序(公共文件夹以外的任何应用程序)不应该是公共的,因此不应放在public(public_html)文件夹中。

我实际上尝试了很多东西以获得类似于你的设置运行的东西。我的结论是 - 只有更改 .htaccess 文件才足以在公共文件夹中运行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. 将laravels公共文件夹的内容放到公共html中,并更改引用以适合public_html而不是公共文件夹。

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

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

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