【问题标题】:Remove subfolder using URL rewriting使用 URL 重写删除子文件夹
【发布时间】:2020-07-05 13:25:58
【问题描述】:

我不是 URL 重写方面的专家,但我想使用 .htaccess 来显示这样的路径:

https://www.example.com/folder/login/

这样:

https://www.example.com/folder/

但我不想要真正的重定向:我的网站应该显示 https://www.example.com/folder/login/ 页面,但 URL 会有所不同,这样用户在登录时可能会认为他仍然在 https://www.example.com/folder/ 上。

有可能吗?

如果是,最后一个问题:我已经在 ROOT 文件夹上启用了RewriteEngine on,我是否也必须将它放在另一个 .htaccess 文件中(放在 https://www.example.com/folder/login/ )?

【问题讨论】:

  • 实际处理请求的文件是什么?这是您应该重写的文件。大概您已经链接到/folder/ 而不是/folder/login/?
  • 我想显示/folder/login/,但网址为/folder/

标签: html .htaccess redirect url-rewriting


【解决方案1】:

/folder/ 是请求的 URL,显示在浏览器的地址栏中,/folder/login/ 是请求被重写到的底层文件系统路径。

要在内部将/folder/ 重写为/folder/login/,请在根.htaccess 文件中尝试以下操作。

RewriteEngine On

RewriteRule ^folder/$ /folder/login/ [L]

/folder/login/ 大概是一个文件系统目录,所以这不会直接处理请求。理想情况下,您将直接重写到处理请求的文件。在这种情况下,我假设 mod_dir 将为目录索引文档发出内部子请求,例如。 index.php?

我已经在 ROOT 文件夹上启用了 RewriteEngine

注意指令的顺序很重要。

我是否也必须将其放入另一个 .htaccess 文件中(放入 https://www.example.com/folder/login/)

不,您可以将它放在根.htaccess 文件中。 (你可以把它放在/folder/.htaccess,但是指令需要改变。把它放在/folder/login/.htaccess 是没有意义的,因为你不能隐藏/login 子目录。)

【讨论】:

  • 问题是/folder/中有另一个文件,所以重定向它我认为它会产生冲突,不是吗?
  • 您不能从同一个 URL 获得两个不同的响应。 /folder/ 返回“另一个文件”或它返回来自 /folder/login/ 的内容 - 你不能两者都做。如果用户请求/folder/,您的服务器如何知道要响应哪些内容?
  • 我认为可以将folder 放在自己的路径上(这样您就可以请求folder 并打开它),当您请求folder/login 时,它确实会打开folder/login,但是你只在地址栏上可视化 /folder/
  • 不,你不能这样做 - 不能使用 .htaccess。当您请求/folder/login/ 时,这就是您在浏览器地址栏中看到的内容。您可以在外部将请求重定向回/folder/,因此/folder/login/ 从地址栏中有效地“消失”(用户不一定会在地址栏中看到它,因为它是 v.quick),但用户会看到 @ 987654348@ 在 状态栏 和页面上的链接中。但是现在您遇到了一个 URL /folder/ 的问题,它预计会显示 2 个不同的页面。 URL 必须是唯一的。
  • 在不同文件夹中有太多.htaccess 文件可能很难维护。您可能在文档根目录中只需要一个.htaccess 文件,但请注意指令的顺序很重要。如果您在/path/to/dir/ 中有一个.htaccess 文件,那么它仅在请求/path/to/dir/ 时才被处理(直接或通过内部重写)。
猜你喜欢
  • 2023-03-09
  • 2023-04-03
  • 1970-01-01
  • 2021-09-11
  • 2018-05-25
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 2020-09-06
相关资源
最近更新 更多