Php 在URL中隐藏目录名

Php 在URL中隐藏目录名,php,apache,.htaccess,laravel,xampp,Php,Apache,.htaccess,Laravel,Xampp,我一直试图从URL中隐藏文件夹名称,但我失败得很惨。我的URL id0.0.0.0/project/api/api/foo。正如您所看到的,有两个api,我只想展示一个。我一直使用的.htaccess位于目录的根目录上,看起来像: <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d

我一直试图从URL中隐藏文件夹名称,但我失败得很惨。我的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>

重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$/api/api/$1[L]

我尝试过几种不同的方法,但都不管用。第一个
api
是目录名,第二个
api
是Laravel为路由输入的内容,而不是目录。两者兼备很难看,因此如何删除第一个
api

要让服务器接受您的请求,您可以使用以下方法:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^project/api/(.*)$ /project/api/api/$1 [L]
</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^project/api/(.*)$/project/api/api/$1[L]
此规则将使对
YOURDOMAIN/project/api/SOMETHING
的每个请求(在服务器中)看起来都像是
YOURDOMAIN/project/api/SOMETHING


但是-您需要确保网站/应用程序中的链接正确。

要使服务器接受您的请求,您可以使用以下方法:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^project/api/(.*)$ /project/api/api/$1 [L]
</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^project/api/(.*)$/project/api/api/$1[L]
此规则将使对
YOURDOMAIN/project/api/SOMETHING
的每个请求(在服务器中)看起来都像是
YOURDOMAIN/project/api/SOMETHING


但是,您需要确保网站/应用程序中的链接是正确的。

没有必要干扰.htaccess。您只需更新路由文件,使其不包含第二个
api
路径

您可以删除在路由上手动定义的领先
api
段,也可以删除Laravel默认情况下添加到
routes/api.php
文件中所有路由的自动
api
前缀


要删除默认前缀,请打开您的
app/Providers/RouteServiceProvider.php
文件,转到底部的
mapApiRoutes()
方法,删除
'prefix'=>'api',
行。

无需干扰.htaccess。您只需更新路由文件,使其不包含第二个
api
路径

您可以删除在路由上手动定义的领先
api
段,也可以删除Laravel默认情况下添加到
routes/api.php
文件中所有路由的自动
api
前缀


要删除默认前缀,请打开
app/Providers/RouteServiceProvider.php
文件,转到底部的
mapApiRoutes()
方法,删除
'prefix'=>'api',
行。

首先,谢谢!我尝试了你的建议,但仍然看到
0.0.0.0/project/api/api/foo
。我仔细检查了所有的链接,它们都是正确的。我不确定这是否重要,但这是针对Laravel的,它允许我提供Restfull端点,这就是为什么您在末尾看到
foo
。您所说的“看到”是什么意思?正如我的回答-这一改变不会改变你的链接。它只告诉服务器如何处理链接。啊,我想我应该仔细阅读。正如我在这篇文章的标题中提到的,我想在我的url中隐藏api目录名。所以不要把它放在url中:)它存在于url中,因为你把它放在了那里。如果你不把它放在那里,它就不会在那里。首先,谢谢你!我尝试了你的建议,但仍然看到
0.0.0.0/project/api/api/foo
。我仔细检查了所有的链接,它们都是正确的。我不确定这是否重要,但这是针对Laravel的,它允许我提供Restfull端点,这就是为什么您在末尾看到
foo
。您所说的“看到”是什么意思?正如我的回答-这一改变不会改变你的链接。它只告诉服务器如何处理链接。啊,我想我应该仔细阅读。正如我在这篇文章的标题中提到的,我想在我的url中隐藏api目录名。所以不要把它放在url中:)它存在于url中,因为你把它放在了那里。如果你不把它放在那里,它就不会在那里。就是这样!我正沿着一条蜿蜒的小路走。谢谢你的修复!就这样!我正沿着一条蜿蜒的小路走。谢谢你的修复!