Laravel public_html 子文件夹中的项目在使用 .htaccess 重定向时出现问题
Laravel project in subfolder of public_html gives trouble with .htaccess redirect
我已经设置了我的 VPS 服务器并正在尝试设置一个 Laravel 项目。
我有一个 /public_html/
文件夹,在访问网站 URL.
时会显示 index.html
- 我有一个 laravel 项目位于:
/public_html/project_one/
- 原文index.php位于
/public_html/project_one/public/index.php
我希望该网站默认显示给 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]
这让我感到很奇怪:
- On Chrome: 它将我重定向到 www.mainurl.com/project_one -> 然后给我一个 403 禁止错误。**
- 在 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 应用在打开此网站时显示,您有两种选择。
将 laravels public 文件夹的内容放入 public html 并更改引用以适应 public_html public 个文件夹。
如果服务器上的文件结构类似于.../var/stuff/.../public_html/ 然后将所有内容上传到 ../var/stuff/my -project 然后转到您的主机界面并进行内部重定向到 ../var/stuff/my-project/public 文件夹,一切都会好起来的,而无需更改 laravel 代码中的任何内容. (除 .env 之外的任何内容)
所以实际问题是您的域指向文件夹 public_html,而不是您应用程序的 public 文件夹。但是请不要将您的应用程序直接放入 public_html,将其平行放置并更改域指向的位置。
如果您向我们提供一些关于您的托管商的信息,我们可能会提供指南
我已经设置了我的 VPS 服务器并正在尝试设置一个 Laravel 项目。
我有一个 /public_html/
文件夹,在访问网站 URL.
- 我有一个 laravel 项目位于:
/public_html/project_one/
- 原文index.php位于
/public_html/project_one/public/index.php
我希望该网站默认显示给 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]
这让我感到很奇怪:
- On Chrome: 它将我重定向到 www.mainurl.com/project_one -> 然后给我一个 403 禁止错误。**
- 在 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 应用在打开此网站时显示,您有两种选择。
将 laravels public 文件夹的内容放入 public html 并更改引用以适应 public_html public 个文件夹。
如果服务器上的文件结构类似于.../var/stuff/.../public_html/ 然后将所有内容上传到 ../var/stuff/my -project 然后转到您的主机界面并进行内部重定向到 ../var/stuff/my-project/public 文件夹,一切都会好起来的,而无需更改 laravel 代码中的任何内容. (除 .env 之外的任何内容)
所以实际问题是您的域指向文件夹 public_html,而不是您应用程序的 public 文件夹。但是请不要将您的应用程序直接放入 public_html,将其平行放置并更改域指向的位置。
如果您向我们提供一些关于您的托管商的信息,我们可能会提供指南