首页 > 解决方案 > 您如何使用 htaccess 从 URL 中隐藏某些内容

问题描述

在我的应用程序中,我有一个包含多个项目的网上商店。对于每个项目,您都可以拥有不同的颜色。所以颜色必须在 url 中才能作为参数发送。

当您单击一个项目时,您将使用 URL http://cmsproject.local/item/2/nocolor发送到该项目的页面。nocolor是我想从 url 中隐藏的东西,结果看起来像这样: http://cmsproject.local/item/2

如果您选择了一种颜色,则 URL 的最后一部分看起来是“ /2136c7 ”。这不是问题,应该仍然是这样的。只有当没有选择颜色时,url 才应该隐藏nocolor部分。

我尝试了多个论坛,但没有一个适合我。我尝试过这样的事情: RewriteRule ^2/nocolor/(.*)$ $1。还有这个 RewriteRule ^/2/nocolor [L]

我的 htaccess 文件如下所示:

重写引擎开启

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# 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]
RewriteRule ^/2/nocolor [L]

有了这个,我预计 url 会“隐藏” nocolor部分,而不是什么都没有改变,也没有显示任何错误。

标签: phplaravel.htaccess

解决方案


如果我正确理解您的要求,我认为您不一定需要在 HTTP 服务器级别处理此问题。据我了解,您需要一个可以包含可选参数的 URL。

根据您的示例,我的假设是 URL(带有或不带有颜色)由同一端点处理。所以我的建议是你通过可选的路由参数将该责任委托给 Laravel 路由器。

这是一个如何处理它的示例,通过简单的路由闭包展示(这当然可以是控制器操作方法):

Route::get('item/{id}/{color?}', function ($id, $color = null) {
    // If the URL is "/items/2" then $color will be null
    // If the URL is "/items/2/2136c7" then $color will be '2136c7'
});

使用上面的示例,您可以处理这两种情况。


推荐阅读