我们正在使用名为ExpressionEngine的CMS。
我们有名为Contact的模板/文件夹 - 有和索引文件。我们只有联系的索引页面,因为我们没有联系人需要的更深的URL。
但是,如果您在正常联系页面网址的末尾添加任何内容,则会在联系人页面上加载相同的内容,但不会重定向并保留随机网址。
示例:
这是正确的网址并显示索引内容:
http://www.example.com/contact/
这些是不正确的网址(仍然有效 - 一切正常),并显示索引内容:
http://www.example.com/contact/kjhfd/
http://www.example.com/contact/kjhfd/kljhdf/
http://www.example.com/contact/f/
我们希望停止并将301重定向到http://www.example.com/contact/。
我已尝试使用htaccess进行RedirectMatch - 我已尝试在htaccess中进行301重定向,并且我已经尝试了一个时髦的PHP,如果重定向 - 到目前为止都没有工作
我们没有PHP重定向。我们有许多htaccess重定向,请参见下文:
RewriteEngine On
#Trailing backslash
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* [QSA,L]
答案 0 :(得分:1)
快速简便的解决方法是检查网址中的segment_3(如果存在),然后重定向到联系人索引页面。您可以使用{redirect}标记。
private byte[] DoWhile(string filePath)
{
byte[] bytes = new byte[0];
bool fail = true;
while (fail)
{
try
{
using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
bytes = new byte[file.Length];
file.Read(bytes, 0, (int)file.Length);
}
fail = false;
}
catch
{
Thread.Sleep(500);
}
}
System.IO.File.Delete(filePath);
return bytes;
}
答案 1 :(得分:0)
您可以在htaccess中使用以下处理程序:
RedirectMatch ^/contact/.+$ /contact
这会将带有尾随路径的网址重定向到正确的位置
/contact/foo
到
/contact