【发布时间】:2023-01-14 22:26:39
【问题描述】:
我目前正在使用子域将客户细分到他们自己的网站 - 这只是为了在 URL 中显示客户名称。但是,没有必要使用子域。相反,我想拥有 1 个网站并重写 url,以便每个客户的名称在 URL 中显示如下: https://test.com/CLIENT_NAME/index.php
当客户端第一次访问https://test.com/CLIENT_NAME/时,如果会话变量“CLIENT_NAME”!isset,我想将它们路由到 test.com/index.php?id=CLIENT_NAME(但保持 URL 显示为https://test.com/CLIENT_NAME/)所以我可以使用“id”中的 $_GET 变量从数据库中获取数据并设置会话变量。
一旦登录并设置了 CLIENT_NAME 的会话变量,我只想重写每个 URL 以在基本域之后具有 /CLIENT_NAME/,但实际上该站点将所有页面都当作它只是基本域(没有 /CLIENT_NAME/ ).
例如,一旦登录: 该 URL 将显示为 test.com/CLIENT_NAME/page_1,但服务器将访问存储在根 public_html 文件夹中的文件,该文件夹通常通过访问 test.com/page_1.php 来访问。
同时,最好从每个网页的末尾删除“.php”(如上例)。
感谢你的协助!
我已经尝试了在这里找到的各种其他示例,但似乎每个人都为 RewriteBase 使用固定参数,而不是检查会话变量以查看是否在那里设置了某些内容,然后将该值用作 RewriteBase,如果是的话,或将用户重定向到 GET 请求(屏蔽 url)以设置会话变量。
【问题讨论】:
-
您是否尝试过实施此操作?你不需要在这里使用
RewriteBase。您也不能基于 PHP 会话变量在 Apache/.htaccess中重写 - Apache 无权访问“PHP 会话”。但是,您可以改为基于 cookie 重写 - 这对您有用吗? -
就我个人而言,我会向您指出一个路由器脚本,这意味着您可以执行全部你在 PHP 中的逻辑。参见this,特别是关于
$_SERVER['REQUEST_URI']的部分。 -
非常感谢您的 cmets。我花了很多时间查看您推荐@ChrisHaas 的帖子。虽然我很难理解它。我认为在另一个问题的情况下,他们正在寻找基于特定子文件夹的路由。我不知道如何编写重写规则以获取“test.com/any_company_name_here/index.php”并将其定向到特定的 PHP 文件,我可以在其中使用 $_SERVER['REQUEST_URI'] 编写 PHP 代码来设置会话变量。有任何想法吗?再次感谢!!
标签: php .htaccess url-rewriting