php - 您如何使用 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部分,而不是什么都没有改变,也没有显示任何错误。
解决方案
如果我正确理解您的要求,我认为您不一定需要在 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'
});
使用上面的示例,您可以处理这两种情况。
推荐阅读
- linux - 为什么 tty 和 ttyS 字符设备具有相同的主设备号?
- reactjs - React start npm 不起作用 - 发生错误事件
- java - 线程“主”java.lang.OutOfMemoryError 中的异常:在 http 调用期间无法创建新的本机线程
- java - 无法迁移 android sqllite 数据库
- angular - 使用不同的数据多次加载动态组件
- java - Java - 从剪贴板检索图像 - 左右裁剪图像
- css - 无法解析“../pages”中的“.file.scss”
- javascript - 使用 Vuejs 在方法内循环
- node.js - 繁琐的超时 PIVOT mssql
- css - 谷歌地图组件可以从它所在的外部卡片中拖动,并且缩放控制移动