使用htaccess在子目录中安装Laravel 5 app

Ben*_*ole 16 .htaccess mod-rewrite laravel laravel-routing

安装程序

我正在尝试在我的服务器上的此目录中安装laravel 5应用程序:

public_html/myapp/

我希望通过以下URL访问它:

http://www.example.com/myapp/

我创建了这个.htaccess规则并将其放在myapp文件夹中以重定向请求:

RewriteEngine on
RewriteRule ^(.*)$ public/$1 [L]
Run Code Online (Sandbox Code Playgroud)

问题:

在我尝试访问应用程序的浏览器中,我获得了重定向的URL,例如:

  • http://www.example.com/myapp/public/index.php
  • http://www.example.com/myapp/public/index.php/dashboard

而不是漂亮的美丽网址,如:

  • http://www.example.com/myapp/
  • http://www.example.com/myapp/dashboard

我需要在.htaccess文件中更改以获取正确的URL吗?


更新:如果需要,可以将laravel应用程序移动到其他位置,只要可以实现上面所需的URL结构(可以通过example.com/myapp/访问该应用程序).

更新:当我尝试访问时,example.com/myapp/dashboard我在浏览器中收到以下错误消息:NotFoundHttpException in compiled.php line 7793:堆栈跟踪以以下内容开头:

in compiled.php line 7793
at RouteCollection->match(object(Request)) in compiled.php line 7066
at Router->findRoute(object(Request)) in compiled.php line 7038
at Router->dispatchToRoute(object(Request)) in compiled.php line 7030
at Router->dispatch(object(Request)) in compiled.php line 1989
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
Run Code Online (Sandbox Code Playgroud)

更新:以下.htaccess文件位于公用文件夹中:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

</IfModule>
Run Code Online (Sandbox Code Playgroud)

ate*_*fth 12

你可以做的是使用符号链接.

  1. 将您的laravel应用程序放在其他位置(在public_html文件夹之外)
  2. 在public_html文件夹中创建应用程序公共文件夹的符号链接

    cd/path/to/your/public_html

    sudo ln -s/path/to/your/laravel_app/public myapp

您可以在此处阅读有关符号链接的更多信息.


sha*_*ddy 5

您可以通过.htaccessmyapp文件夹中添加其他文件来轻松实现此目的(这会将文件夹中的所有请求重定向myapppublic应该的位置):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

您还应该.htaccessmyapp/public目录中修改,如下所示:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On    
    RewriteBase /myapp/

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule . index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

此处的更改是您重写了基本路径 RewriteBase /myapp/