如何删除URL生成的Laravel中的"public/index.php"?

TuG*_*llo 81 php .htaccess laravel laravel-4 laravel-routing

我需要删除 index.phppublic/index.php从Laravel生成的URL; 通常的道路是localhost/public/index.php/someWordForRoute,应该是这样的localhost/someWordForRoute.

的.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]
Run Code Online (Sandbox Code Playgroud)

应用程序/配置/ app.php

'url' => 'http://localhost',
Run Code Online (Sandbox Code Playgroud)

我怎么能改变呢?

Luz*_*ral 120

选项1:使用.htaccess

如果它不存在,请在Laravel根目录中创建.htaccess文件..htaccess如果Laravel根目录不存在,请创建一个文件.(通常在你的public_html文件夹下)

编辑.htaccess文件,使其包含以下代码:

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

现在您应该能够访问没有"/public/index.php/"部分的网站.

选项2:将'/ public'目录中的内容移动到根目录

在根目录中创建一个新文件夹,并移动除公用文件夹之外的所有文件和文件夹.您可以随意调用它.我将使用"laravel_code".

接下来,将所有内容移出公共目录并移至根文件夹.它应该导致与此类似的东西: 在此输入图像描述

之后,我们所要做的就是编辑laravel_code/bootstrap/paths.php文件和index.php文件中的位置.

laravel_code/bootstrap/paths.php找到以下代码行:

'app' => __DIR__.'/../app',
'public' => __DIR__.'/../public',
Run Code Online (Sandbox Code Playgroud)

并将它们改为:

'app' => __DIR__.'/../app',
'public' => __DIR__.'/../../',
Run Code Online (Sandbox Code Playgroud)

index.php,找到这些行:

require __DIR__.'/../bootstrap/autoload.php';     
$app = require_once __DIR__.'/../bootstrap/start.php';
Run Code Online (Sandbox Code Playgroud)

并将它们改为:

require __DIR__.'/laravel_code/bootstrap/autoload.php';     
$app = require_once __DIR__.'/laravel_code/bootstrap/start.php';
Run Code Online (Sandbox Code Playgroud)

来源:如何在Laravel中删除/ public/from URL

  • 在生产模式下,转移到/ root根本不是一个好建议!存在公用文件夹的原因 (7认同)
  • 如果您使用Debian Linux,请不要忘记编辑从`AllowOverride None`更改为`AllowOverride All`的`etc/apache2/apache2.conf`,其中您看到Directory配置,`<Directory/var/www /> </目录>`. (4认同)

Tej*_*hav 39

我在Laravel 4.2上试过这个

重命名server.phpLaravel根文件夹中index.php.htaccess文件并将文件从/public目录复制到Laravel根文件夹.

我希望它有效

  • 不再从公用文件夹加载js和css文件 (4认同)
  • 如果 Luazan 接受的答案不起作用,那么这就足够了。尽管我会确保编辑公共文件夹中的 index.php 文件,以便在用户直接访问该链接时将用户重定向到公共之外。 (2认同)
  • @ 151291,因为每个人都可以访问.env文件,因此它会访问您的网站。除非您保护Web服务器安全以避免这种情况。 (2认同)

Kha*_*azi 13

这里是删除公共URL的简单步骤(Laravel 5)

1:从公共文件夹复制所有文件,并在laravel根文件夹中将其过去

2:打开index.php并进行更改

 require __DIR__.'/../bootstrap/autoload.php';
Run Code Online (Sandbox Code Playgroud)

 require __DIR__.'/bootstrap/autoload.php';
Run Code Online (Sandbox Code Playgroud)

$app = require_once __DIR__.'/../bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)

$app = require_once __DIR__.'/bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)

在laravel 4中,路径2 $app = require_once __DIR__.'/bootstrap/start.php';代替$app = require_once __DIR__.'/bootstrap/app.php';/app.php

这就对了.


Ank*_*rma 13

不要与其他选项混淆我正在使用的下面的代码片段,对你也很有用.将以下htacces放在根目录中.

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

转到您的公共目录,并将另一个htaccess文件与下面的代码段放在一起

<IfModule mod_rewrite.c>
    RewriteEngine On
    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

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

它的工作...... !!!

Laravel在.htaccess下方使用

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
Run Code Online (Sandbox Code Playgroud)


小智 10

1)检查mod_rewrite是否已启用.转到/etc/apache2/mods-enabled目录,看看它是否rewrite.load可用.如果没有,请使用该命令启用它sudo a2enmod rewrite.它将启用重写模块.如果已启用,则会显示该消息Module rewrite already enabled.
2)为公共目录创建一个虚拟主机,这样http://localhost/public/index.php我们就可以使用那样的代码http://example.com/index.php.[因此公用文件夹名称将被
隐藏] 3)然后创建一个.htaccess,它将隐藏你的url中的index.php,该url应位于根目录(公共文件夹)中

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
Run Code Online (Sandbox Code Playgroud)


Abh*_*ire 7

对于 Laravel 4 和 5:

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

就是这样 !!:)


smc*_*nes 5

这可能与Laravel无关,而与您的Apache配置无关。

您可以访问Apache服务器配置吗?如果是这样,请从文档中进行检查:

通常,仅在无权访问主服务器配置文件时才应使用.htaccess文件。例如,存在一种普遍的误解,即用户身份验证应始终在.htaccess文件中进行,而在最近几年,又出现了另一种误解,即mod_rewrite指令必须在.htaccess文件中进行。这根本不是那么回事。您可以将用户身份验证配置放在主服务器配置中,实际上,这是首选的处理方式。同样,在许多方面,mod_rewrite指令在主服务器配置中效果更好。

...通常,应尽可能避免使用.htaccess文件。您可以考虑在.htaccess文件中进行的任何配置,都可以在主服务器配置文件中的某个部分中有效地进行。

资料来源:Apache文档

我之所以首先提到它,是因为.htaccess如果可能的话,最好是完全摆脱掉,并在Directory标签内使用VirtualHost标签。话虽这么说,剩下的一切将假设您.htaccess出于任何原因都坚持使用这条路线。

为了解决这个问题,可能会发生一些事情:

  1. 我注意到,也许毫无意义地.htacces在您的问题中命名了您的文件。我的猜测是这是一个错字,但您偶然忽略了它,而实际上只是错过了第二个s,这恰恰是一种小错误,会让我把头撞在墙上,寻找更具挑战性的东西。

  2. 您的服务器无法允许.htaccess。要检查这一点,请转到您的Apache配置文件。在现代的Apache构建中,这通常不在一个配置文件中,因此请确保使用一个指向应用程序的文件,无论它存在于何处。更改

    AllowOverride none
    
    Run Code Online (Sandbox Code Playgroud)

    AllowOverride all
    
    Run Code Online (Sandbox Code Playgroud)

    作为后续,Apache文档还建议出于安全目的,如果要.htaccess进行重写,请不要对每个文件夹都这样做。而是对需要添加.htaccess到的文件夹执行此操作。

  3. mod_rewrite启用了吗?那可能是造成问题的原因。我注意到您的标签位于顶部<IfModule mod_rewrite.c>。尝试注释掉这些标记,然后重新启动Apache。如果出现错误,则可能是因为您需要启用mod_rewrite如何为Apache 2.2启用mod_rewrite

希望这可以帮助。我已经列出了一些最常见的问题,但还有其他一些可能更为平凡或独特。开发服务器上的另一个建议?重新安装Apache。如果可能的话,请从其他来源获得良好的教程。


Raf*_*ari 5

另请确保在编辑 .htaccess 文件后打开重写引擎

sudo a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)