【问题标题】:.htaccess rewrite using session variables as RewriteBase.htaccess 使用会话变量重写作为 RewriteBase
【发布时间】: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


【解决方案1】:

你不会相信这一点,但我在 ChatGPT 的帮助下设法找到了答案 哈哈

它给了我这个:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/portals/
RewriteRule ^([^/]+)/(.*)$ /index.php?folder=$1&path=$2 [L,QSA]

我改成了这个:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/portals/
RewriteCond %{REQUEST_URI} !^/portals/index.php
RewriteCond %{REQUEST_URI} !^/includes/
RewriteCond %{REQUEST_URI} !^/home/
RewriteRule ^([^/]+)/(.*)$ portals/$2?portalID=$1&path=$2 [L,QSA]

谢谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多