禁用特定文件夹/路由的Laravel路由。

19

我想知道如何在Laravel中禁用特定目录的路由?

我希望将我的主网站使用Laravel(我正在将其重写为框架),但我想保留当前的论坛软件!问题是,当Laravel看到“localhost/forums”时,它会查找一个论坛控制器或路由。我希望它只是简单地进入字面上的/forums目录..?


2
请发布您的 routes.php 文件。 - Andreyco
@Andreyco,你能帮忙吗? - Mitchell M
6个回答

15

我不得不在public/.htaccess中添加这行代码。

RewriteCond %{REQUEST_URI} !^/foldername

在这行代码之前(重定向尾随斜杠)

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

运行得非常好!谢谢。 - Senthil Vel
这个可以工作。确保你正在更新正确目录的 .htaccess 文件。 - Guy

6

在Laravel 4中,这些解决方案都不适用于我。最终,我通过放置

RewriteRule ^(directory-name) - [L]

之前

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

在公共/.htaccess文件中

4

您需要在您的.htaccess文件中进行排除。 在将所有内容发送到index.php的规则之上,添加以下内容:

RewriteCond %{REQUEST_URI} !^/forums

任何以 /forums 开头的内容都不会被发送到 Laravel。

(当然,这是假设您正在使用 Apache。)


对我来说,/public 中的所有文件都可以正常加载,无需更改 .htaccess。问题在于像 /public/forum 这样的路径不再自动加载该路径下的索引文件,必须通过 /public/forum/index.php 访问,上述规则也没有帮助。有什么想法如何解决这个问题吗? - cen

3
根据你的routes.php文件,它应该可以工作。
  1. 你完全没有捕获forum URL。
  2. 如果'forum'目录/文件存在,则不会重新编写URL以适应Laravel的index.php

routes.php(我在测试用例中使用了这个)

Route::get('{slug}', function($slug){
    return $slug;
});

文件结构

|- app
|- public
|--- index.php // Laravel's one
|--- forum // directory for forum files
|------ index.php // Forum's one
....

使用这种结构,URL不会被重写到Laravel的路由index.php文件中。 如果我重命名/删除forum文件夹,则URL将被重写。

对您有用吗?


2

我需要在Laravel 5.7中排除/billing网址。以下方法适用于我:

Route::redirect('/billing', '/billing');

当计费位于: 我的计费文件夹位置


0

我正在使用nginx,它对我很有效:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接