为什么“/ public”仍然在URL中?

时间:2018-05-27 15:58:18

标签: php laravel apache .htaccess mod-rewrite

我有一个像这样的文件夹结构:

.cpanel/ 
public_html/ 
public_ftp/ 
..

和public_html目录中的laravel项目如下:

app/
bootstrap/
public/
vendor/
composer.json
artisan
..

问题在于,当我输入www.example.com这样的网址时,它会重定向到www.example.com/public。 我找到了一条重写规则,允许我放入www.example.com,只显示public/index.php而没有“/ public”部分:

 RewriteEngine on 
 RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
 RewriteCond %{REQUEST_URI} !^/subfolder/ 
 RewriteCond %{REQUEST_FILENAME} !-f 
 RewriteCond %{REQUEST_FILENAME} !-d 
 RewriteRule ^(.*)$ /subfolder/$1 
 RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
 RewriteRule ^(/)?$ subfolder/index.php [L] 

它适用于索引页面,但当我尝试转到任何路由时,“/ public”会在URL中显示备份。

为什么此重写规则适用于索引页而不适用于任何路由?什么重写规则适用于从URL中删除“/ public”的所有页面?

2 个答案:

答案 0 :(得分:0)

在您的本地环境中,将public重命名为public_html

将项目复制到父文件夹,以便laravel公用文件夹现在是public_html

.cpanel/ app/ bootstrap/ vendor/ composer.json artisan public_html/ public_ftp/ ..

不要试图用.htaccess来捏造它,因为你会将.env文件暴露在你的服务器根文件夹中。如果你这样做,这是一个很大的安全问题。

答案 1 :(得分:-1)

这应该有效:

  1. 将Laravel根目录中的server.php文件重命名为index.php
  2. 将.htaccess文件从/ public目录复制到Laravel根目录。