Laravel 4从URL中删除public

时间:2013-03-23 11:47:00

标签: php frameworks laravel

所以,我在Windows上运行xampp。我目前正在努力熟悉laravel框架。现在,当那些指出。我怎样才能直接在root中访问我的laravel应用程序/网站?

实施例,

  • 我现在正在做的是:localhost / laravel / public / about(看看 关于页面)
  • 我想做的是:localhost / laravel / about

对此有什么好的解决方案吗?我需要在laravel的根文件夹中添加.htacess文件吗? (不是公众的)。

有什么建议吗?

20 个答案:

答案 0 :(得分:12)

最简单的方法是在Laravel根目录中创建.htaccess文件,其中包含以下内容:

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

应该很容易重定向。

参考: https://coderwall.com/p/erbaig/laravel-s-htaccess-to-remove-public-from-url

答案 1 :(得分:11)

我是这样做的。

  1. 编辑Windows主机文件 - C:\ Windows \ System32 \ drivers \ etc \ hosts
  2. 编辑Apache vhosts文件 - Drive-Letter:\ xampp \ apache \ conf \ extra \ httpd-vhosts.conf
  3. 将htaccess文件添加到laravel / public文件夹(如果尚未存在)
  4. 重新启动Xampp apache服务器
  5. 由于用户帐户控制,Windows在尝试编辑Hosts文件时可以是真正的PITA。由于我从事各种小型业余爱好项目,所以我必须一直编辑这个文件,这就是我的工作。

    • 安装PSPad。它加载速度非常快,您可以将文件加入书签以便于加载/编辑。如果您加载我上面提到的两个文件并将工作区另存为新项目,Sublime Text也可以正常工作。
    • 右键单击PSPad(或其他编辑器)程序快捷方式,然后选择“以管理员身份运行”。除非您这样做,否则无法将更改保存到主机文件。
    • 在编辑器中打开Windows主机文件。此文件没有文件扩展名,因此您必须在“文件打开”对话框中选择“所有文件”以查看该文件。
    • 在文件底部添加:

      127.0.0.1  laravel.dev
      

      这告诉Windows只要您在浏览器的地址栏中输入laravel.dev,就会将Web浏览器指向localhost。

    • 保存文件。
    • 打开xampp Apache httpd-vhosts.conf文件。
    • 在文件的底部,添加:(我假设xampp安装在D:驱动器的根目录下)

      <VirtualHost *:80>
        ServerName laravel.dev
        DocumentRoot "D:/xampp/htdocs/laravel/public"
        <Directory "D:/xampp/htdocs/laravel/public">
        </Directory>
      </VirtualHost>
      
    • 将htaccess文件添加到laravel / public文件夹(如果尚未存在)。 我认为L4附带的默认htaccess文件如下所示:

      Options -MultiViews
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^ index.php [L]
      
    • 重新启动xampp apache服务器。
    • 打开网络浏览器并输入地址栏 - http://laravel.dev
    • 这会将您带到“public”文件夹中的index.php文件。
    • 要进入“关于”页面,我认为地址为http://laravel.dev/about

答案 2 :(得分:10)

/ public 文件夹的内容向下移动一级。

您需要更新index.php中的包含行以指向正确的位置。 (如果它是一个级别,删除'../')。

答案 3 :(得分:10)

BEST Approch :我不建议删除public,而是在本地计算机上创建指向公共目录的虚拟主机,并在远程主机上将public更改为public_html并将域指向此目录。原因,你的整个laravel代码将是安全的,因为它的一级到你的公共目录:)

方法1: 我只是将server.php重命名为index.php,它可以正常工作

方法2:

这是我的目录结构,

/laravel/
... app
... bootstrap
... public
... etc

按照以下简单步骤

  1. 将所有文件从公共目录移至root / laravel /
  2. 现在,不需要公共目录,因此您可以选择立即将其删除
  3. 现在打开index.php并进行以下替换
  4.   

    要求 DIR 。'/ .. / bootstrap / autoload.php';

      

    要求 DIR 。'/ bootstrap / autoload.php';

      

    $ app = require_once DIR 。'/ .. / bootstrap / start.php';

      

    $ app = require_once DIR 。'/ bootstrap / start.php';

    1. 现在打开bootstrap / paths.php并更改公共目录路径:
    2.   

      'public'=&gt;的 DIR 即可。 '/ .. /公共',

        

      'public'=&gt;的 DIR 即可。 '/ ..',

      就是这样,现在尝试http:// localhost / laravel /

答案 4 :(得分:9)

将apache的文档根目录设置为公用文件夹,而不是laravel文件夹。这是最简单的技术,推荐用于生产环境。

答案 5 :(得分:4)

我使用的是L5,这对我很有用:

  1. 将Laravel根文件夹中的server.php重命名为index.php
  2. 将.htaccess文件从/ public目录复制到Laravel根文件夹。
  3. - 那就是!!!“

答案 6 :(得分:3)

我只是在laravel 5中做了一个简单的步骤 在laravel文件夹中像这样制作.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>

然后将您的server.php重命名为index.php

它会起作用

或者如果您只是进行本地开发

运行此comman php artisan serve

它将在localhost:8000启动本地服务器(端口可能会有所不同)

答案 7 :(得分:3)

在.htaccess中添加以下代码(如果不存在,请在laravel根目录下创建.htaccess)

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

来源:http://tutsnare.com/remove-public-from-url-laravel/

在Source你也可以得到另一种方法。

更新:首选方法是更改​​目录结构,在源网址中说明。

答案 8 :(得分:3)

将以下代码添加到htaccess文件中。它可能对你有帮助。

<IfModule mod_rewrite.c>
RewriteEngine On

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

答案 9 :(得分:3)

我一直在努力解决这个问题,但我找到了一个简单的解决方案,只需要你在应用程序的根目录下创建另一个.htaccess。

.htaccess本身应该包含这个:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^{yoursite}.{extension} [NC]
RewriteRule (.*) http://www.{yoursite}.{extension}/$1 [R=301,L]

RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]

整个系统继续工作,但它会重定向到/ public文件夹。

这就是我为自己解决问题的方法。

希望它有所帮助!

干杯。

答案 10 :(得分:2)

您可以使用符号链接或编辑httpd.conf文件。

检查我的answer其他类似问题。我希望它有所帮助。

答案 11 :(得分:2)

如果您不想承受配置 .htaccess 文件的压力, 你可以通过这样做来使用PHP内置服务器:

  1. 从您的命令实用程序,cd到laravel\public
  2. 运行:php -S localhost:8000
  3. 访问:

    后,您可以访问您的网站

    http:://localhost:8000

    无需附加public

    即可投放

    请参阅官方手册以了解更多信息: http://php.net/manual/en/features.commandline.webserver.php

答案 12 :(得分:2)

使用cmd转到项目文件夹并输入&#34; php artisan serve&#34;。 现在导航到:localhost:8000

答案 13 :(得分:2)

我发现geart flow可以与laravel localy一起使用。

您可以做的是稍微配置xampp。在xamp的httpd.conf文件中,您必须找到文档DocumentRoot<Directory>。将根目录更改为您的laravel公用文件夹并重新启动apache。因为只需键入localhost即可简单地访问项目。现在,如果您需要,可以更改主机文件并重写本地dns,例如:127.0.0.1 example.laravel.com现在您可以使用真实URL访问您的项目。它可能看起来有点复杂,但事实并非如此。

替代方案是php artisan serve。您可以在不同的端口上启动服务器,并在重写主机文件时。

您可以添加一些功能来进一步改善工作流程,例如vagrantngrok。您可以分享您的项目以进行实时演示(此处可能会出现速度问题)。

答案 14 :(得分:1)

您需要做以下事情:

  1. 首先复制根目录中公共目录的所有内容,即将公用文件夹1的内容升级。

  2. 修改index.php的内容

  3. From =&gt;

    require __DIR__ . "/../bootstrap/autoload";
    $app = require_once __DIR__ . "/../boostrap/start.php"
    

    To =&gt;

     "require __DIR__.'/bootstrap/autoload.php';"
    "$app = require_once __DIR__.'/bootstrap/start.php';
    

    以及bootstrap / paths.php的内容

    From =&gt; 'public' => __DIR__.'/../../',

    To =&gt; 'public' => __DIR__.'/..',

    3.然后在根目录中最终创建 .htaccess 文件并写下来。

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews
        </IfModule>
        RewriteEngine On
        RewriteRule ^(.*)/$ /$1 [L,R=301]
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    

答案 15 :(得分:1)

需要删除larvel4 app中的公共段

Laravel 4要求您将应用程序代码放在比Web根目录高一级的位置,这会导致一些陷入共享主机并且不允许这样设置的开发人员出现问题。它实际上很容易解决它。我读到一些L4特定的软件包在这样的设置上可能有问题,但我没有遇到任何类似的任何软件包。

首先在你喜欢的地方安装L4。我喜欢Niall写的关于保持基础L4应用程序最新的文章,所以去检查一下:安装和更新Laravel 4

我发现这个示例只需克隆repo就足够了(假设您已经全局安装了composer,如果没有,请转到http://getcomposer.org/):

git clone -b develop git://github.com/laravel/laravel.git app_name

php composer install

请注意,我们正在克隆开发分支,因为此时L4仍处于测试阶段。

因此,要从您的网址中删除“公开”部分,只需将所有文件和文件夹从公开移动到您的应用根目录,您最终将获得如下文件夹结构:

/app
/bootstrap
/packages (copied from /public)
/vendor
.htaccess (copied from /public)
artisan
composer.json
favicon.ico (copied from /public)
index.php (copied from /public)
robots.txt (copied from /public)
server.php

现在我们需要在index.php中编辑路径:

require __DIR__.'/bootstrap/autoload.php';

$app = require_once __DIR__.'/bootstrap/start.php';

然后只需在/bootstrap/paths.php文件中设置公共目录:

'public' => __DIR__.'/..',

这是我的建议

答案 16 :(得分:1)

简单步骤:

  1. server.php(在根目录中)重命名为index.php
  2. .htaccess文件从公共目录复制到根目录

答案 17 :(得分:1)

server.php重命名为index.php,并从.htaccess复制/public是正确的方法。 如果您在线发送应用程序,只需将DocumentRoot更改为公共路径。

答案 18 :(得分:0)

如果你从url中删除public,首先将index.php和.htaccess文件从公共文件夹移动到laravel的root并更改index.php文件

要求DIR。'/ .. / bootstrap / autoload.php'; $ app = require_once DIR。'/ .. / bootstrap / start.php';

要求DIR。'/ bootstrap / autoload.php'; $ app = require_once DIR。'/ bootstrap / start.php';

并运行程序

答案 19 :(得分:0)

之前已经多次询问过这个问题。我有同样的问题。我通过使用vhosts和.htaccess文件解决了这个问题。我想写一些关于Windows上的XAMPP和Ubuntu上的LAMP安装的解决方案。我在windows上的配置: 我的目标是通过输入下面的uri来达到我的申请

http://localhost/subdir

c:\xampp\htdocs\subdir\ # this was laravel root directory
c:\xampp\apache\conf\extra\httpd-vhosts.conf # this virtual hosts file

我使用了来自Laravel网站的原始.htaccess文件(并记住.htaccess文件必须在公共目录中)但我只添加了一行

RewriteBase /subdir (just below RewriteEngine On)

此外,在httpd-vhosts文件中,你应该添加你的子目录别名:

Alias /subdir
"C:/xampp/htdocs/subdir/public"
<Directory "C:/xampp/htdocs/subdir/public">
  Order allow,deny
  Allow from all
  Options All
  AllowOverride All
  Require all granted
</Directory>

希望一切都清楚我的解释。这个答案可以很容易地应用于基于unix的系统。