如何使用本地主机的 .htaccess 从 URL 中删除目录名称

Posted

技术标签:

【中文标题】如何使用本地主机的 .htaccess 从 URL 中删除目录名称【英文标题】:How to remove Directory name from the URL using .htaccess for localhost 【发布时间】:2021-01-24 09:40:39 【问题描述】:

我想更改网址:

http://localhost/rootdirectory/portfolio/project-1.php

收件人:

http://localhost/rootdirectory/project-1

我目前使用了下面的代码,但它不起作用

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^portfolio/(.*)$ /$1 [L,NC,R=301]

此代码将我的 URL 重写为 http://localhost/project-1 而不是 http://localhost/rootdirectory/project-1.

【问题讨论】:

所以让它重定向到/rootdirectory/$1 然后...? 或者$1,如果这个.htaccess 本身应该已经位于/rootdirectory .htaccess 已经在根目录中 【参考方案1】:
    转到包含您网站的所有文件的文件夹。 在您的 cpanel 中将所有文件复制到您的 Public_html 文件夹。

【讨论】:

OP 希望通过仅更改 URL 结构而不是底层文件结构来实现“漂亮”的 URL。不应将任何实际文件移动到任何地方。【参考方案2】:

此代码将我的 URL 重写为 http://localhost/project-1 而不是 http://localhost/rootdirectory/project-1

您发布的代码是“重定向”,而不是“重写”,从/portfolio/<project>/<project> 的URL。

从您的 URL 示例看来,您应该重写 URL 从 /rootdirectory/<project>/rootdirectory/portfolio/<project>.php(假设您已经在应用程序中更改了 URL)。如果 .htaccess 文件位于 /rootdirectory/.htaccess(如 cmets 中所述),那么您将需要类似以下内容:

RewriteRule ^([^./]+)$ portfolio/$1.php [L]

并且移除 RewriteBase / 指令。

【讨论】:

它仍然在 url 中显示目录名称 portfolio,例如 rootdirectory/portfolio/project 我想要的只是目录名称组合不应该出现在 url 中 您需要实际更改出现在 HTML 源代码中的 URL(因此出现在浏览器地址栏中)。 .htaccess 不会为你这样做。您实际上需要将链接更改为/rootdirectory/project-1。然后,您使用.htaccess 将请求从/rootdirectory/project-1内部重写/rootdirectory/portfolio/<project>.php - 如上所述。

以上是关于如何使用本地主机的 .htaccess 从 URL 中删除目录名称的主要内容,如果未能解决你的问题,请参考以下文章