【问题标题】:browse another path without changing the browser url在不更改浏览器 url 的情况下浏览另一个路径
【发布时间】:2020-07-24 19:55:02
【问题描述】:

我有一个托管在 www.domain.com/app/dir/ 的网络应用程序

应用 url 类似于 www.domain.com/app/dir/?p=dashboard/

现在,我有一种情况,我需要在 url 中使用唯一键(我不能将其用作查询字符串)。

所以我需要的是用户将使用不同的网址浏览网络应用程序,例如:

www.domain.com/user1/dir/?p=dashboard/
www.domain.com/user2/dir/?p=dashboard/
www.domain.com/user3/dir/?p=dashboard/

但是当用户访问上述链接时,我需要浏览www.domain.com/app/dir/?p=dashboard/中的文件(不改变浏览器url)。

注意:目录 user1、user2、user3 不存在

【问题讨论】:

  • /app/dir/ 中的“dir”是否与/user1/dir/ 中的“dir”不同或相同? “dir”是变量吗?
  • @MrWhite 没有名为user1 的目录。 /app/dir/ 是存储文件的实际目录(dir 是 app 文件夹内的子文件夹)。我想要的是将/user1/dir/ 重定向到/app/dir/ 而不更改网址。
  • 是的,我在下面的回答似乎涵盖了您在问题中提出的要点。尽管您在源和目标中都使用了相同的文本“dir”——但这些是不相关的,是吗?请注意,这是“重写”,而不是“重定向” - 以便在浏览器中保留 URL。尽管您的评论似乎表明您需要将/user1/dir/<url-path> 重写为/app/dir/<url-path> - 是这样吗?

标签: php .htaccess url-rewriting


【解决方案1】:

如果你只想改变url而不刷新页面:
这个方法是纯javascript

window.history.pushState('', '', 'enter_here_your_url');
如果您想在不刷新页面的情况下加载页面:
这是 JQuery
$("body").load("enter_here_your_page_url");

【讨论】:

  • 对不起,这不是我要找的。我需要一个服务器端解决方案,当用户访问/user1/dir/(实际上不存在)时,我需要将它们转发到/app/dir/而不更改url(即浏览器仍应显示/user1/dir/)跨度>
【解决方案2】:

您可以在.htaccess 中使用 mod_rewrite 来在内部重写 URL 从 /<user>/dir/?p=dashboard//app/dir/index.php - 我认为这是实际的终点,而不是 /app/dir/ -这将需要 mod_dir 为 DirectoryIndex 发出辅助子请求。

我假设<user1> 可以包含任何单词字符,包括连字符。换句话说,a-zA-Z0-9_(下划线)和-(连字符)。

例如:

Options -MultiViews
RewriteEgnine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^p=dashboard$
RewriteRule ^\w+/dir/$ /app/dir/index.php [L]

您可以通过检查 PHP 中的 $_SERVER['REQUEST_URI'] 变量来提取 <user1>(第一个 URL 路径段)。

【讨论】:

    猜你喜欢
    • 2021-01-13
    • 2014-01-23
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2023-01-25
    • 1970-01-01
    相关资源
    最近更新 更多