我有大约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.
答案 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
,请告诉我