在 URL 中隐藏目录名称
Posted
技术标签:
【中文标题】在 URL 中隐藏目录名称【英文标题】:Hide directory name in URL 【发布时间】:2017-05-06 07:34:30 【问题描述】:我一直试图从 URL 中隐藏文件夹名称,但我失败了。我的网址 ID 0.0.0.0/project/api/api/foo
。如您所见,有两个api
,我只想展示一个。我一直在使用的.htaccess
位于目录的根目录,看起来像:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ /api/api/$1 [L]
</IfModule>
我已经尝试了几种不同的变体,但没有任何效果。第一个 api
是目录名,第二个 api
是 Laravel 为路由添加的东西,而不是目录。两个都难看,怎么去掉第一个api
?
【问题讨论】:
【参考方案1】:没有必要弄乱 .htaccess。您只需更新您的路线文件,使其不包含第二个api
路径。
您可以删除您在路由上手动定义的前导 api
段,也可以删除 Laravel 默认为 routes/api.php
文件中的所有路由添加的自动 api
前缀。
要删除默认前缀,请打开 app/Providers/RouteServiceProvider.php
文件,转到底部的 mapApiRoutes()
方法,然后删除 'prefix' => 'api',
行。
【讨论】:
就是这样!我正沿着 WROOOONG 的道路前进。感谢您的修复!【参考方案2】:要让服务器接受你的请求,你可以使用这个:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^project/api/(.*)$ /project/api/api/$1 [L]
</IfModule>
此规则将使对
YOURDOMAIN/project/api/SOMETHING
的每个请求(在您的服务器中)看起来就像实际请求是YOURDOMAIN/project/api/api/SOMETHING
但是 - 您需要确保您的网站/应用程序内部的链接正确的节点。
【讨论】:
首先,谢谢!我试过你的建议,我仍然看到0.0.0.0/project/api/api/foo
。我仔细检查了所有链接,它们是正确的。我不确定这是否重要,但这是针对 Laravel 的,它允许我提供 Restfull 端点,这就是为什么你会在最后看到 foo
。
你是什么意思“看到”?正如我的回答 - 此更改不会更改您的链接。它只告诉服务器如何处理链接。
啊,我想我应该更仔细地阅读。正如我在这篇文章的标题中提到的,我希望在我的 url 中隐藏 api 目录名称。
所以不要把它放在 URL 中 :)
它存在于 URL 中,因为你把它放在那里。如果你不把它放在那里 - 它就不会在那里。以上是关于在 URL 中隐藏目录名称的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess 从站点根目录重定向到公共文件夹,在 URL 中隐藏“公共”?