如何使用本地主机的 .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 中删除目录名称的主要内容,如果未能解决你的问题,请参考以下文章
如何在本地主机上使用 htaccess 制作 seo url? [关闭]
如何在 .Htaccess 中禁用/不允许共享主机 RewriteLog 时,在 Apache 2 中模拟和测试 URL 重写规则?