主页/PHP笔记/PHP问答/框架Laravel/如何为 Laravel 的 ‘/public’ 目录设置自定义路径

如何为 Laravel 的 ‘/public’ 目录设置自定义路径

Bug编译狮

Bug编译狮

在 Laravel 中,默认情况下,/public 目录是应用程序的根目录,它包含了静态文件(如 CSS、JavaScript 和图像)以及动态生成的内容(如路由和控制器输出)。如果你想将 public 目录重命名为其他名称,可以通过以下步骤来实现:

1. 修改 web.php

首先,你需要修改 routes/web.php 文件,以确保所有请求都通过 /custom-public 目录进行处理。

// routes/web.php

use IlluminateSupportFacadesRoute;

Route::get('/custom-public/{path}', function ($path) {
    return view('welcome', ['path' => $path]);
})->where('path', '.*');

在这个例子中,我们使用了 where 方法来匹配所有路径,并将其传递给视图。

2. 修改 index.php

接下来,你需要修改 public/index.php 文件,以确保所有请求都通过 /custom-public 目录进行处理。

// public/index.php

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

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

$kernel = $app->make(IlluminateContractsHttpKernel::class);

$response = $kernel->handle(
    new IlluminateHttpRequest(
        $request->all(),
        $request->method(),
        '/',
        [],
        [],
        $request->server()
    )
);

$response->send();

在这个例子中,我们将路由路径从 /public 改为 /custom-public

3. 创建一个新的路由

为了测试新路径是否正常工作,你可以创建一个新的路由:

// routes/web.php

use IlluminateSupportFacadesRoute;

Route::get('/custom-public/custom-route', function () {
    return view('custom-view');
});

4. 创建一个新的视图

最后,创建一个新的视图文件 resources/views/custom-view.blade.php

<!-- resources/views/custom-view.blade.php -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Custom Route</title>
</head>
<body>
    <h1>Welcome to Custom Route!</h1>
</body>
</html>

总结

通过以上步骤,你已经成功地将 Laravel 的 public 目录重命名为 custom-public。这样,你就可以访问新的路径并查看相应的视图。

黑板Bug讲师

黑板Bug讲师

介绍

Laravel 是一个广泛使用的 MVC 框架,用于 PHP,鼓励良好的应用程序结构,并提供了一组工具来开发 Web 应用程序。在 Laravel 开发过程中,常见的需求之一是如何为 Laravel 应用程序中的“/public”目录设置自定义路径。在这个教程中,我们将探索如何为 Laravel 应用程序中的“/public”目录设置自定义路径。

理解 /public 目录

在标准的Laravel应用程序中,/public目录作为文档根目录,其中存储着index.php文件和其他资产,如样式表、JavaScript文件和图片等。它是所有Laravel应用程序请求的入口点,旨在通过浏览器直接访问唯一的一个目录。

.htaccess 文件

如果你在使用Apache服务器上托管Laravel应用,设置“/public”目录的自定义路径的方法之一涉及修改.htaccess文件。.htaccess文件允许您将请求从您的服务器重定向到应用程序中的目标位置。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/custom_path/
RewriteRule ^(.*)$ /custom_path/$1 [L,NC]

确保.htaccess文件位于项目根目录下,且将’custom_path’替换为您新‘公共’目录的名称。

服务器配置

另一种设置自定义的“/public”路径的方法是在您的Web服务器上配置虚拟主机。

对于Apache,您需要提供更多信息以便我能进行翻译。

<VirtualHost *:80>
    DocumentRoot "/path/to/your/application/custom_path"
    ServerName your-domain.com

    <Directory "/path/to/your/application/custom_path">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

对于Nginx:

server {
    listen 80;
    server_name your-domain.com;
    root /path/to/your/application/custom_path;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
        fastcgi_pass unix:/var/run/php/php-version-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

请记得将 ‘/path/to/your/application/custom_path’ 替换为您的新 ‘public’ 目录的实际路径,以及 ‘your-domain.com’ 替换为您自己的域名名称。

修改Index.php

在配置好Web服务器后,您必须更新位于新“公共”目录中的“index.php”文件,以反映路径结构的变化。

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

确保路径与应用程序的目录结构相匹配,考虑包括‘bootstrap’在内的相关目录。

调整配置

一些资产,例如编译的CSS或JavaScript文件,也可能需要反映新的目录结构。您可能需要修改Laravel Mix配置。

mix.setPublicPath('custom_path');

这告诉Laravel Mix 将编译后的资产放置在您新的自定义‘公共’目录中。您可以使用视图中的asset()或mix()辅助函数来包含这些资产。

使用艺匠命令自动化

如果你经常需要调整“公共”目录结构,可以考虑创建一个artisan命令来简化这个过程。以下是一个示例artisan命令,它自动化了设置自定义公共路径的过程:

php artisan make:command SetCustomPublicPath

请提供需要更新的命令、规则或配置的具体信息,以便我为您提供相应的编程指导。

重要考虑因素

在更改“公共”目录时,考虑安全影响,并确保仔细审查和测试服务器配置。

结论。

在Laravel应用程序的/public目录中自定义可以解决特定服务器需求或部署策略的问题。通过遵循本教程中的方法,开发人员可以成功修改默认结构以满足其需要。

长工码奴1523

长工码奴1523

要在 Laravel 中为 ‘/public’ 目录设置自定义路径,请按照以下步骤操作:

  1. 首先,打开您的 Laravel 项目的 app/Http/Middleware/VerifyCsrfToken.php 文件。
  2. 在文件顶部添加如下代码:
    
    namespace AppHttpMiddleware;

use Closure; use IlluminateSupportFacadesApp; use IlluminateSupportFacadesRoute;

class VerifyCsrfTokenMiddleware { /**

  • Handle an incoming request.
  • @param IlluminateHttpRequest $request
  • @param Closure $next
  • @return mixed */ public function handle($request, Closure $next) { if (App::environment(‘local’) && ! $this->isProduction()) { return $next($request); }

    return redirect()->route('login');

    }

    private function isProduction() { // 在这里添加检查生产环境的逻辑 return false; // 或者根据实际情况返回 true } }

  1. 在您的项目目录中创建一个新的文件夹,例如 production. 这里将用于存放生产环境下的配置和数据。

  2. production 文件夹添加到项目的 storage 目录下(如果尚未创建):

    cd <your_project_path>
    mkdir production
    mv storage/production/ <your_storage_directory>
  3. 现在您可以在 Laravel 中使用 /public 目录中的文件了,无需担心它们会出现在生产环境中。

  4. 如果需要在生产环境中访问 /public 目录中的文件,请确保您的应用程序已启用生产模式,并且在生产环境下运行。这可以通过修改 .env 文件中的 APP_ENV=production 来实现。

  5. 关于验证 CSRF token 的具体示例代码:

<?php

namespace AppHttpControllers;

use IlluminateFoundationTestingWithoutMiddleware;
use IlluminateFoundationTestingDatabaseTransactions;

/**
 * @group middleware
 */
class VerifyCsrfTokenController extends Controller
{
    use WithoutMiddleware, DatabaseTransactions;

    protected $middleware = [
        'VerifyCsrfTokenMiddleware',
    ];

    public function __construct()
    {
        parent::__construct();
        $this->middleware->add(new VerifyCsrfTokenMiddleware());
    }
}

现在您可以像之前一样在 Laravel 应用程序中使用 /public 目录中的文件,而不用担心这些文件会被误认为是生产环境中的内容。