Как убрать дублирование, страницы доступны по ссылкам без расширения и с ".html" (htaccess)

12
I
На сайте с 29.08.2017
Offline
1
4181

Помогите пожалуйста.

В вебмастере яндекса увидел сообщение о возможных ошибках "Некорректно

настроено отображение несуществующих файлов и страниц", проверил, если

набрать http://site.com/любые-символы то идет переадресация на

страницу ошибок, все работает правильно. Движок сайта делали на заказ (php + mysql).

Но, если зайти на любую страницу, убрать .html и обновить страницу, то

вместо переадресации на страницу ошибок, эта страница (дубль) остается на

экране (в логе по этому URL без .html 200 код, т. е. ошибкок нет).

А некоторые страницы по этому неправильному URL без .html еще и в поиске янедкса есть.

Получается все страницы на сайте продублированы, например:

http://site.com/slovo1-Slovo2.html

http://site.com/slovo1-Slovo2

http://site.com/07/Slovo1-slovo2-2.html

http://site.com/07/Slovo1-slovo2-2

Мой файл .htaccess

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.site.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/_\-]+)(\.(html))?$ /?path=$1 [L,QSA]

Подскажите пожалуйста, как это дублирование можно исправить?

Если пользователь (поисковик) заходит на правильный адрес, но, без html, то его бы переадресовывало

на правильную страницу с .html.

J
На сайте с 20.02.2014
Offline
120
jkm
#1


RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/_\-]+)$ http://site.com/$1.html [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/_\-]+)\.html$ /?path=$1 [L,QSA]
I
На сайте с 29.08.2017
Offline
1
#2

Большое спасибо jkm!

Заработало как нужно.

I
На сайте с 29.08.2017
Offline
1
#3
jkm:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/_\-]+)$ http://site.com/$1.html [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/_\-]+)\.html$ /?path=$1 [L,QSA]

Поздно обнаружил проблему. К сожалению, при использовании этого кода не работает как нужно поиск по сайту, судя по тому, что при наборе абсолютно любого запроса, получаю результат "По фразе "" (кавычки и в них пусто)", предполагаю, что код в .htaccess полностью обрезает всю поисковую фразу и естественно, что по пустой фразе нет и результата.

Вернул назад свой .htaccess при нем поиск работает правильно, по фразам "слово1-слово2" или "слово1 слово2" или любых других на странице с результатами этого поиска показывает "По запросу "любая фраза" найдено Х страниц."

А если таких страниц нет то показывает "По запросу "любая фраза" найдено 0 страниц".

Помогите пожалуйста, что нужно изменить чтобы и поиск по сайту тоже нормально работал?

dma84
На сайте с 21.04.2009
Offline
168
#4
ivcou:
Помогите пожалуйста, что нужно изменить чтобы и поиск по сайту тоже нормально работал?

Дать в репу тому, кто писал движок и не мучить ModRewrite

M
На сайте с 04.12.2013
Offline
223
#5

ivcou, по каким адресам отображаются результаты поисковых запросов? Какой адрес имеет обработчик поисковых запросов (или запрос обрабатывается на тек. странице)?

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
I
На сайте с 29.08.2017
Offline
1
#6
miketomlin:
ivcou, по каким адресам отображаются результаты поисковых запросов? Какой адрес имеет обработчик поисковых запросов (или запрос обрабатывается на тек. странице)?

Сейчас результат работы поискового запроса на странице http://сайт.com/search

А когда поиск не работал то переход был на страницу http://сайт.com/search.html

Может быть проблема из за того, что эта единственная на сайте страница c URL "search" не имеет расширения .html?

Извиняюсь, упустил это из виду в прошлый раз.

M
На сайте с 04.12.2013
Offline
223
#7

Если сечете, попробуйте просто адрес обработчика поменять с /search на /search.html.

А вообще результат просто по адресу /search(.html) – это странно. По идее там должен быть какой-нибудь сложный зависящий от запроса довесок к адресу (примерно как у ПС). Но в принципе это отдельная проблема, не связанная с поднятой в данном топике.

---------- Добавлено 27.09.2017 в 20:49 ----------

P.S. Если поменять адрес обработчика будет сложно, можно попробовать добавить условие, чтобы делать редирект только для GET-запросов (не POST-).

---------- Добавлено 27.09.2017 в 20:53 ----------

P.P.S. Можно еще добавить исключение для редиректа конкретно для /search, чтобы не возиться с определением используемого метода запроса.

I
На сайте с 29.08.2017
Offline
1
#8
miketomlin:
Если сечете

К моему большому сожалению не секу...

И как сделать все, что вы советуете тоже не знаю.

J
На сайте с 20.02.2014
Offline
120
jkm
#9

ivcou, для исключения достаточно добавить RewriteCond %{REQUEST_URI} !^/search

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.site.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301,L]

RewriteCond %{REQUEST_URI} !^/search
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/_\-]+)$ http://site.com/$1.html [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9/_\-]+)\.html$ /?path=$1 [L,QSA]
S
На сайте с 30.09.2016
Offline
469
#10

Если попадёт на обработчик, в чём я сомневаюсь.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий