2

我可以使用 htaccess 捕获来自某个子目录的请求,并使该目录将其自身用作任何根相对路径请求的根目录吗?例如,如果我有...

http://www.example.com/subFIXED/subANY/restofpath

...其中 subFIXED 始终是同一个目录,subANY 是 subFIXED 的任何直接子目录,我希望重定向 subANY 下任何文件的所有 href/src 请求以使用 subANY 作为“根”(有点像子域) ,实际上有根级别的请求使用它作为根目录级别:

http://www.example.com/subFIXED/subANY/

而不是这个:

http://www.example.com/

我假设我可以在 subFIXED 中放置一个 htaccess 文件来处理来自任何 subANY 下的任何内容的所有调用,但对 htaccess 重写、变量等不太熟悉,我不知道如何捕获哪个 subANY 目录是发出根级别请求,然后使用该捕获进行重写以将该目录视为来自它的任何根相对路径请求的根级别。

谢谢你的帮助

4

1 回答 1

2

嗯,.htaccess?它将不得不依赖极其不可靠的 HTTP_REFERER,不,谢谢。

在您的 HTML 中添加一个 <base> 元素并完成。 http://www.w3schools.com/tags/tag_base.asp


编辑:相对于根目录(“/foo”)也应该考虑在内,所以在使用 <base> 修复相对路径之后:

.htaccess(非常不可靠,因为切换子路径几乎是不可能的,并且 HTTP_REFERER 非常不可靠。简而言之:不要使用)

RewriteCond %{HTTP_REFERER} ^.*://[^/]+/subFIXED/([^/]+)/
RewriteCond %{REQUEST_URI}  !^/subFIXED
RewriteRule ^(.*)$ /subFIXED/%1/$1 [R=301,L,QSA] //drop the R=301 if POSTing, but url will not show the 'correct' one in that case

陷阱:

  1. POST 很尴尬(无法重定向和保留 POST,因此必须“正常”着陆,这将使后续请求中的 REFERER 无用/错误
  2. 经常不发送推荐人
  3. 发送 REFERER 时,不可能从任何其他“subAny”切换到其他“subAny”

更可行的解决方案:

  1. 在服务器上使用脚本对每个请求进行后处理,在每个以“/”开头的引用 (href/src) 中添加一个点 (.)。
  2. 前一个可以使用客户端 javascript 完成,但不推荐这样做,因为禁用 js 的搜索机器人和浏览器的所有链接都会中断
  3. 制作一个实际的子域,这只是一个麻烦。

简而言之,除了制作实际的子域之外,没有理想的解决方案。您需要此“固定根路径”解决方案的确切问题是什么?可能还有其他人不涉及这么多麻烦。

于 2010-06-05T21:44:21.977 回答