如果使用htaccess存在目录,则重定向到目录

时间:2018-03-09 20:44:25

标签: apache .htaccess

我有大约250个关于public_html的目录,我想进入/ clients /。由于原始网址是例如mysite.com/bob已经在客户的印刷营销材料中使用,我需要让它们可以访问。我想当有人去mysite.com/bob(示例)时,htaccess会检查mysite.com/agents/bob是否存在,然后重定向到它,如果有的话。到目前为止,我已经检查了SO帖子并提出了这个问题,但我正试图让它适用于任何名称场景。

uses
  System.SysUtils, System.DateUtils;

function InvertDate(ADateTime: TDateTime): TDateTime;
var
  LMsec: Int64;
begin
  LMsec := MillisecondsBetween(ADateTime, 0); //Always Positive
  if ADateTime > 0 then
    LMsec := 0 - LMsec;
  Result := IncMillisecond(0, LMsec);
end;

var
  LDate1: TDateTime;
  LDate1Negative: TDateTime;
  LDate2: TDateTime;

begin
  try
    LDate1 := IncMinute(0, 20);
    LDate2 := IncMinute(0, -20);
    WriteLn('Date1: ' + DateTimeToStr(LDate1));
    // Output = Date1: 30/12/1899 00:20:00 [OK]
    WriteLn('Date2: ' + DateTimeToStr(LDate2));
    // Output = Date2: 29/12/1899 23:40:00 [OK]
    WriteLn('-----');

    WriteLn('Date1: ' + DateTimeToStr( InvertDate(LDate1) ));
    // Output = Date1: Expected 29/12/1899 23:40:00
    WriteLn('Date2: ' + DateTimeToStr( InvertDate(LDate2) ));
    // Output = Date2: 30/12/1899 00:20:00
    ReadLn;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

1 个答案:

答案 0 :(得分:1)

在您的代码中,替换最后一行:

RewriteRule ^(.+)\/?$ "http\:\/\/mysite\.com\/agents\/bob" [R=301,L]

有了这个:

RewriteCond %{REQUEST_URI} !/agents/
RewriteCond %{REQUEST_URI} !/error_page.php
RewriteRule ^(.+)\/?$     /agents/$1 [R=301,L]

因此,上面的代码会将所有请求重定向到/agents/目录并排除包含/agents/的任何请求以避免循环然后如果请求错误,错误页面将处理该问题并且我也从此排除规则。

如果您想先在/agents/中查看,请在另一个位置告知我添加其他规则。

清除浏览器缓存测试。

更新:

请改为尝试:

RewriteCond %{REQUEST_URI} !/bob/agents/
RewriteRule ^bob/(.+)\/?$     /agents/bob/$1 [R=301,L]

更新2

RewriteCond %{THE_REQUEST} !/agents/
RewriteCond %{DOCUMENT_ROOT}/agents%{REQUEST_URI} -f
RewriteRule ^(.*)$    /agents%{REQUEST_URI} [L,R=301]

上面的代码会检查任何不包含/agents/的请求,甚至到site.com/index,然后检查/agents/目录,如果它存在,它将重定向到/agents/,否则将按原样处理。

如果您想排除index,请告诉我