解决路由名称和文件夹名称之间的冲突

Posted

技术标签:

【中文标题】解决路由名称和文件夹名称之间的冲突【英文标题】:Resolve Conflict between route name and folder name 【发布时间】:2014-08-08 20:33:00 【问题描述】:

我有一个问题(很明显),我使用的是 Laravel 4.1,并且我使用 Laravel 制作了我的网站的 V2,V1 是一个静态网站(没有 php,只有很多 html 文件和文件夹)。

现在,我想进行 301 重定向,因为旧用户的书签中仍然有旧网址,而其他网站仍然使用旧网址引用我。 所以当人们通过这些旧网址时,我希望他们被重定向到新网址上好吗(没问题)?

事实上,当我尝试访问我的 V2 中的旧网址时,看起来像是一种新的路由模式。好吧,我会更准确地解释一下。所以想象一下我有 www.example.com/en/restaurants/,这是我旧网站上文件夹餐厅的路径, 现在我有这样的路线 =>

Route::get('$lang/$category', PostController@getPosts)

然后我在浏览器中输入 www.example.com/en/restaurants/.. 我的路线不起作用.. 它会显示文件夹内容..

希望你明白我的意思!

谢谢大家。

【问题讨论】:

【参考方案1】:

它将在触及您的路线之前提供真实的文件和文件夹。如果您使用的是 apache,.htacess 会告诉它只重写不是实际路径的路径,nginx 也是如此。

有一些方法可以覆盖它,但不要这样做,因为它会严重影响资产的加载并产生很多讨厌的错误。

我的建议是,在 laravel 公共目录中没有原始内容。最好的办法是编译所有 URL 的列表,并在路由文件的底部有一个 catch all 路由,您可以在其中检查它是否在列表中,并相应地重定向。这很烦人而且有点乏味,但老实说,这是最好的选择。也许是一个配置文件?

<?php
return [
    'oldurl'    => 'newurl/route'
];

【讨论】:

好的,谢谢,我认为你是对的......我会这样做。 虽然如果你有一个重定向列表为oldurlnewurl 你也可以将它们直接放在.htaccess 文件中,节省Web服务器,甚至在第一个简单的工作中打扰PHP地点。 其实我没明白你的意思。我应该有一个 php 文件为每个键返回一个数组,旧 URL 及其值是配置文件中的新 URL。然后,在我的 routes.php 中会发生什么?我有 342 个旧网址。你的意思是我应该添加 342 条新路由??? 不,你需要将它们全部重定向到某个地方,但如果它们没有对应的路由,那么只需将它们重定向到主页。 @alexrussell 是正确的,你可以用 .htaccess

以上是关于解决路由名称和文件夹名称之间的冲突的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 Java 中的类和包之间的名称冲突?

在python程序编写过程中,如何解决模块名称冲突?

该文件包与具有同一名称的现有文件包存在冲突

成员名称和构造函数参数名称之间的冲突[重复]

冲突全局和局部变量名称

目标C:通过cocoapod在我的应用程序中添加框架时发生名称冲突