2013-03-29 5 views
0

У нас есть несколько внешних сайтов, которые ссылаются на наш сайт, но их код искажен и вызывает проблемы со ссылкой, что заставляет Google думать, что у нас есть больше 404 на нашем сайте, чем мы на самом деле делаем.htaccess strip все после .html

Что происходит, их неправильный код добавляет символы ASCII после .html, которые представляют собой их закрывающий тег привязки.

Итак, что я пытаюсь сделать в моем файле htaccess, это удалить все после .html и перенаправить на чистый .html URL-адрес (без возникновения бесконечного цикла).

Вот несколько образцов того, что приходит в ...

> http://www.site.com/pagename.html"> 
> http://www.site.com/pagename.html</a> 

И я хотел бы переадресовать тех ...

http://www.site.com/pagename.html 

ответ

3

Вам просто нужно, чтобы соответствовать тем, которые имеет .+ (один или несколько символов) после.html и выполнить перенаправление.

RewriteEngine On 
# Capture everything before .html into $1 (non-greedy) 
# And do a redirection appending only .html onto $1 
RewriteRule (.+?)\.html.+$ http://%{HTTP_HOST}/$1.html [L,R=301] 

И так как вы делаете переназначения, а не переписывает, вы также можете сделать это с помощью RedirectMatch:

RedirectMatch permanent (.+?)\.html.+$ http://example.com/$1.html 
+0

Спасибо Майкл - Я очень близко теперь с вашей помощью. URL-адрес перенаправления теперь чист в конце, но он перенаправляется с сайта www.site.com/pagename.html </a > на сайт www.site.com/var/www/site.com/pagename.html. Я попробовал пару разных вещей, чтобы попытаться исправить это, но я думаю, что я причиняю больше вреда, чем пользы. Мысли? – Rmilligan2372

+0

@ Rmilligan2372 См. Выше - я добавил протокол и принимаю перенаправление. Я всегда забываю, что если это делается в htaccess, а не в конфигурации сервера, переписыванию не предшествует '/', который перепутает перенаправления, когда apache выглядит в файловой системе. –

+0

Отлично! Большое спасибо!! – Rmilligan2372