【问题标题】:.htaccess regex for HTTP_HOST followed by a specific folderHTTP_HOST 的 .htaccess 正则表达式,后跟特定文件夹
【发布时间】:2012-02-14 19:27:13
【问题描述】:

我正在尝试编辑我的 .htaccess 文件以执行以下操作: 1)判断HTTP_HOST是否不是我自己的域,example.com 2)判断是否是otherdomain.com/admin/_anything_here_

/admin/ 是我正在寻找的特定文件夹,然后我不在乎它后面的内容(但我确实需要将它保留在那里)。所以基本上任何以 /admin/ 作为第一个文件夹并且不是 example.com 的东西都应该重写到 otherdomain.com/admin/_anything_still_here_

据我了解,使用 (.*)$ 将“存储”_anything_here_ 部分并允许我将其与 $1 一起使用。

到目前为止我有这个,但它没有完全工作:

RewriteCond ^%{HTTP_HOST}+(/admin.*)$ !^([^.]+\.)*example\.com+(/admin.*)
RewriteRule (.*)$ rewrite/to/here$1/ [L]

【问题讨论】:

  • 我不明白 /admin... 被改写成什么。举个例子。对于otherdomain.com/admin/_anything_here_ => otherdomain.com/admin/_anything_still_here_
  • 抱歉,有点不清楚。基本上,otherdomain.com/admin/_anything_here_ 应该重写为 rewrite/to/here$1/,其中 $1 是 anything_here。我有 anything_still_here 的原因只是为了表明我不想删除 /admin/ 之后的内容。这有帮助吗?
  • 不多。假设 URL 是这样的:otherdomain.com/admin/site/old。这应该改写成什么?
  • 它会重写到 otherdomain.com/rewrite/to/here/admin/site/old

标签: regex apache .htaccess mod-rewrite redirect


【解决方案1】:

尝试将以下内容添加到站点根目录中的.htaccess 文件中。

您需要将somefolder 替换为您要重写的实际文件夹

RewriteEngine on
RewriteBase / 

#if its not example.com
RewriteCond %{HTTP_HOST} !example\.com$ [NC] 
#if its admin folder, rewrite it to somefolder
RewriteRule ^(admin/.*)$  somefolder/$1[L,NC] 

以上假设otherdomain.comexample.com 位于具有相同根文件夹的同一台服务器上。

【讨论】:

  • 仅 RewriteRule 部分就使它看起来可以工作。不过,不确定这是否是完全正确的方法(即它是否会在其他地方引起问题)。我会尝试解决这个问题。
  • @joshholat RewriteCond 仅在您托管具有相同根目录的多个站点时才需要
猜你喜欢
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 2023-02-01
相关资源
最近更新 更多