与htaccess的子目录安装Laravel 5应用

问题描述 投票:16回答:4

The Setup

我想我的服务器上此目录中安装一个laravel 5应用程序:

public_html/myapp/

我希望它在这个网址访问:

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

我创造了这个规则的.htaccess并将其放置在myapp文件夹,以便将请求重定向:

RewriteEngine on
RewriteRule ^(.*)$ public/$1 [L]

Problem:

在我的浏览器,当我尝试访问该应用程序我重定向的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应用程序可以在其他地方,如果需要被移动,只要上述(与example.com/myapp/访问的应用)所需的URL结构可以实现的。

更新:当我尝试访问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))

更新:下面的.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>
.htaccess mod-rewrite laravel laravel-routing
4个回答
12
投票

你可以做的是使用一个符号链接。

  1. 请将您的laravel应用在其他地方(的的public_html文件夹外)
  2. 创建您的应用程序的公用文件夹的符号链接的public_html文件夹中 CD /路径/到/你/的public_html 须藤LN -s /路径/到/你/ laravel_app /公共MYAPP

你可以阅读更多关于符号链接here


5
投票

您可以轻松地在.htaccess文件夹中添加额外的myapp文件(这将所有myapp文件夹的请求,因为它应该重定向到public)实现这一点:

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

你也应该修改.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>

这里的变化是,你重写的基本路径RewriteBase /myapp/


0
投票

我也有同样的问题,但与RewriteBase参数有可能解决它。

这是我的.htaccess:

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

    RewriteEngine On
    RewriteBase /my_app/

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

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

-2
投票

这个例子应该下列情况下工作:

跟着这些步骤:

  1. 从MYAPP移动家居/公共文件夹的myapp /文件夹
  2. 开的myapp / index.php的和更新的引导路径,以要求__DIR __'。/引导/
  3. 打开.ENV和更新自己的基本网址,如:APP_URL = http://example.com/myapp
  4. 在所有视图和布局(也在代码,如果您有任何)更新路径使用基本URL,例如:SRC =“{{网址::到(‘/ JS / app.js’)}}”

它总是建议公用文件夹从您的应用程序的其余部分分开。您可以通过添加在他们里面.htaccess文件将包含“所有拒绝”加了一些保护Laravel文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.