0

我创建了一个 RewriteMap 来处理大量的域代理。我的重写条件如下所示:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
  RewriteRule ^ - [E=MAPTO:${rewritemap:%1}]
  RewriteCond %{ENV:MAPTO} !=""
  RewriteRule ^.*$ http://exampledomain.com/%{ENV:MAPTO}/$0/ [P,NC]
</IfModule>

基本上,我的 RewriteMap 将查看传入的域,将其与数据库中的条目匹配,并返回类似“用户/用户 ID”的内容。

例如,这将在地址栏中显示传入域,但显示在http://exampledomain.com/user/userid/返回的内容

现在,由于某种原因,我得到了一个 301 重定向到http://exampledomain.com/user/userid/ — 没有代理。这可能是什么原因造成的?

4

1 回答 1

0

哎呀,这是因为我打开了输出缓冲。来自 Apache 文档:

请务必关闭程序中的缓冲。

关闭它,现在它正在工作。

更新

显然,这并没有解决问题。不知道为什么它似乎有效,而现在却没有。如果其他人有任何建议,我会采纳。

更新 2

好的,这次我删除了斜杠,它似乎有效:

RewriteRule ^.*$ http://exampledomain.com/%{ENV:MAPTO}/$0 [P,NC]

我猜测传入域是否没有目录或文件名,它以双斜杠关闭,这导致页面重定向。

于 2019-05-02T05:34:06.677 回答