【问题标题】:How to remove client id from url with htaccess?如何使用 htaccess 从 url 中删除客户端 ID?
【发布时间】:2012-09-20 10:10:33
【问题描述】:

我正在创建如下网址:

http://domain.com/app/clientID/controller/ 要么 ../app/clientID/filename.ext

我需要从 URL 中删除字母数字 clientID。

我目前的 htacces 是:

重写规则 ^app/([a-z0-9]+)/(.)$ /app/$2 [NC,L]

它通过了 htaccess 测试器,但我在网络上收到 404 错误。

示例:http://domain.com/app/gmcpoujth7/js/fancybox/jquery.fancybox-1.3.4.pack.js

我做错了什么?

【问题讨论】:

  • 您在 apache 中的错误日志显示什么?查看它以了解它在收到错误 404 时尝试访问的真实路径
  • app/js/fancybox/ 下是否有名为jquery.fancybox-1.3.4.pack.js 的js 文件? ...只是要求确保
  • 是的,文件存在。看了错误日志。文件不存在:/home/npxxx/domains/domain.com/public_html/app/clientID

标签: php .htaccess routing


【解决方案1】:

这是一个双向的问题。

  1. 您想从网址中删除clientID
  2. 您希望脚本仍然有效

为了使其工作,您还需要添加一个重写脚本来告诉您的文件在哪里访问这些文件。这有点棘手,可能需要比htaccess 更多的工作。

由于 url 正在被重写和重定向,您需要有某种方法将该 url 重定向到当前的clientID。这是棘手的部分。您可以添加以下行来设置 cookie:

RewriteRule ^app/([a-z0-9]+)/(.)$ /app/$2 [co=clientID:$1:.yourserver.com:7200:/,NC,L]

然后在第二次调用中,您将执行如下本地重写:(未测试)

RewriteCond %{HTTP_COOKIE} ^.*clientID=([a-z0-9]+).*$ [NC]
RewriteRule /app/$ /app/$1/$2 [QSA]

这不是一个完整的答案,因为如果有人只是转到:http://domain.com/app/js/fancybox/jquery.fancybox-1.3.4.pack.js 而没有先转到带有 clientID 的 URL,如果有多个 clientID,服务器可能不知道将它们发送到哪里。最好的办法是保持 clientID 不变。

【讨论】:

  • 我认为为所有客户端设置单独的 URL 会更好。我只需要重新路由文件和控制器。
  • 就像我说的,除非你有其他方法来控制clientID,否则它几乎是不可能的。这可以是 post/get 变量、cookie 或其他项目。由于无法知道正在访问什么客户端,因此别无选择,只能将其保留在那里。
  • 问题是所有客户端都使用同一个核心。因此,控制器和文件需要相同,地址栏上的 url 不同。
  • 那您为什么不将核心文件从客户端文件夹中提取出来并将它们托管在不同的文件夹中。示例:http://domain.com/core/....。然后,您可以将核心文件的 url 从 /app/clientID/.. 重定向到 /core/...,或者让它们直接链接到它们。但是如果你想为所有文件包含clientID,问题仍然存在。
猜你喜欢
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
相关资源
最近更新 更多