【问题标题】:How do you hide something from the URL with htaccess您如何使用 htaccess 从 URL 中隐藏某些内容
【发布时间】:2019-06-05 14:15:47
【问题描述】:

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

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

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

我尝试了多个论坛,但没有一个适合我。我尝试过这样的事情: RewriteRule ^2/nocolor/(.*)$ $1。还有这个 重写规则 ^/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 部分,而不是什么都没有改变,也没有显示任何错误。

【问题讨论】:

  • 只有 ID 为 2 的项目?为什么你的那个号码包括在 htaccess 中?

标签: php laravel .htaccess


【解决方案1】:

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

根据您的示例,我的假设是 URL(带有或不带有颜色)由同一端点处理。所以我的建议是你通过 optional route parameters 将这个责任委托给 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'
});

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

【讨论】:

    【解决方案2】:

    您应该在您的 laravel 应用程序中执行此操作,但在 htaccess 中,解决方案将如下所示:

    RewriteRule ^/item/([0-9]+)/? /item/$1/nocolor
    
    • ^比赛开始
    • ? 可选
    • + 至少出现一次

    查看 RegEx 以进一步了解。

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2015-10-06
      相关资源
      最近更新 更多