在 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' =&gt; '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 中隐藏目录名称的主要内容,如果未能解决你的问题,请参考以下文章

从URL隐藏目录

.htaccess 从站点根目录重定向到公共文件夹,在 URL 中隐藏“公共”?

linux如何创建隐藏文件或目录(名称前加.)

从 url Wordpress 中删除目录名称

如何在 .htaccess 中创建别名以直观地隐藏 URL 的目录路径

CodeIgniter - 如何从 URL 中隐藏 index.php