Помогите настроить урл

12 3
M
На сайте с 23.08.2012
Offline
62
852

Подскажите что и как надо сделать. (здесь ссылки не рабочие, не пытайтесь по ним переходить, это вселишь примеры)

Вообщем есть сайт у адрес примерно выглядит так: http://site.ru/index.php?id=pade; В вебмастере яндекса стали появляться и индексироваться похожие страницы (дубли) http://site.ru/?id=pade; http://site.ru/index.php?tt=pade.

Есть ещё http://site.ru/index.php - это нормальная, а эта http://site.ru/index.php? - с восклицательным знаком, как его убрать.

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

С вопросительным. Насколько знаю, одинокий ? в .htaccess и т.п. отловить нельзя. Нужно копать глубже. На чем сайт?

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
Katrin1988
На сайте с 14.03.2012
Offline
78
#2

Вот почему надо формировать ЧПУ. УРЛы с GET параметрами всегда обрастают лишними параметрами.

LinkBoss.net - Трастовые ссылки для увеличения трафика в 10 раз! (http://linkboss.net/)
M
На сайте с 23.08.2012
Offline
62
#3

Наверно на PHP.

Я в PHP плохо разбираюсь, такой код присутствует:<?php

include "includes/contents.php";

if($_GET['id'] == "") {

$page = "contents/".$contentname;

include $page;

}

else{

$page = "contents/" . $_GET['id'] . ".php";

include $page;

if (file_exists ( $page = "contents/" . $_GET['id'] . ".php" ))

{echo '<b><font color="green"></font></b>'; }

else {echo '404';

$error="true";

}

}

echo"</div>";

?>

Удалил слеш в конце и index.php

RewriteEngine on

RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.site.ru [NC]

RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/

RewriteRule ^index\.php$ http://site.ru/ [R=301,L]

И удалил category (не существующие папки) из URL

---------- Добавлено 23.08.2016 в 14:38 ----------

Katrin1988:
Вот почему надо формировать ЧПУ. УРЛы с GET параметрами всегда обрастают лишними параметрами.

ЧПУ - этот код: <IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

</IfModule>

- он у меня не работает.

eklips007
На сайте с 02.02.2010
Offline
64
#4

Mixalko, ЧПУ - человеко понятный урл. Насколькоя понимаю у вас Wordpress? Можете сделать скрин того что у вас в админке в настройках URL?

LinkBoss.net - Трастовые ссылки для увеличения трафика в 10 раз! (http://linkboss.net/)
M
На сайте с 23.08.2012
Offline
62
#5
eklips007:
Mixalko, ЧПУ - человеко понятный урл. Насколькоя понимаю у вас Wordpress? Можете сделать скрин того что у вас в админке в настройках URL?

Нет не Wordpress и не джумла и не др.. Это было давно чтото придумано и работало. Последнее время начал замечать дубли страниц в поиске как описано выше.

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

Mixalko, код крайне слабый, в том числе и в плане безопасности.

Вот это вообще шедевр:


$page = "contents/" . $_GET['id'] . ".php";
include $page;
if (file_exists ( $page = "contents/" . $_GET['id'] . ".php" ))

Судя по логике (да, я умудрился даже здесь рассмотреть задатки таковой), чтобы закрыть одинокий ?, нужно написать что-то подобное:


if ($_SERVER['REQUEST_URI']=='/?') {
echo '404';
$error="true";
}
elseif($_GET['id'] == "") {
Хотя конечно тут лучше действовать не от противного, а в лоб, т.е. проверять адрес на соответствие всем имеющимся у вас обработчикам, но а если такое соответствие не найдено, выдавать 404-ую ошибку.

ЧПУ могло быть сокрыто вот за этим кодом:


$page = "contents/".$contentname;
include $page;

Но к сожалению что такое $contentname, из приведенного кода непонятно. Рекомендую вам почитать эту мою статью: Как сделать единую точку входа с ЧПУ? Но а в целом вам крайне рекомендуется хотя бы что-то такое.

---------- Добавлено 23.08.2016 в 16:49 ----------

P.S. Дубли из-за GET-параметров – проблема многих сайтов. Сам Яша тоже этим страдает, хотя им походу это пофиг, лишь бы других подрючить:

yandex.ru/?

yandex.ru/?id

yandex.ru/?id=killme

---------- Добавлено 23.08.2016 в 16:53 ----------

Моя подружка в этом плане попродвинутей оказалась: gency.ru/? :D

M
На сайте с 23.08.2012
Offline
62
#7
miketomlin:
Mixalko, код крайне слабый, в том числе и в плане безопасности.

Вот это вообще шедевр:
$page = "contents/" . $_GET['id'] . ".php";
include $page;
if (file_exists ( $page = "contents/" . $_GET['id'] . ".php" ))

А что здесь не так? Подскажите как сделать правильно.

---------- Добавлено 23.08.2016 в 17:23 ----------

miketomlin:
Mixalko

Судя по логике (да, я умудрился даже здесь рассмотреть задатки таковой), чтобы закрыть одинокий ?, нужно написать что-то подобное:

if ($_SERVER['REQUEST_URI']=='/?') {
echo '404';
$error="true";
}
elseif($_GET['id'] == "") {
Хотя конечно тут лучше действовать не от противного, а в лоб, т.е. проверять адрес на соответствие всем имеющимся у вас обработчикам, но а если такое соответствие не найдено, выдавать 404-ую ошибку.

Если честно этот знак меня волнует меньше всего, со временем разберусь.

Подскажите как избавиться от дублей:

site.ru/index.php?id=pade

site.ru/?id=pade

раньше такого не было, заметил не давно когда в поиске появилось много страниц.

ЧПУ решит эту проблему?

nikonlay
На сайте с 11.12.2006
Offline
176
#8

Mixalko, чтобы решить проблему таких дублей, нужно сделать 301 редирект с одного на другой. Что-то вроде этого:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/

RewriteRule ^index\.php$ http://site.ru/$1 [R=301,L]

Мощные фонари и бинокли: https://market.yandex.ru/store--volny-i-veter?businessId=79203856
M
На сайте с 04.12.2013
Offline
223
#9

nikonlay, зачем $1? Он тут вообще не катит. Это у ТС-а есть:


RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.ru/ [R=301,L]
Только почему ТС говорит, что «http://site.ru/index.php - это нормальная», когда нормальная – это /, я не знаю.

---------- Добавлено 23.08.2016 в 18:48 ----------

Mixalko, уберите довесок \ HTTP/ в конце первой строки.

---------- Добавлено 23.08.2016 в 18:53 ----------

Mixalko:
ЧПУ решит эту проблему?
Если «в поиске появилось много страниц», то адресацию теперь уже лучше не трогать. Нужно было раньше думать. Теперь только так или редирект.
M
На сайте с 23.08.2012
Offline
62
#10
miketomlin:
nikonlay, зачем $1? Он тут вообще не катит. Это у ТС-а есть:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.ru/ [R=301,L]
Только почему ТС говорит, что «http://site.ru/index.php - это нормальная», когда нормальная – это /, я не знаю.

---------- Добавлено 23.08.2016 в 18:48 ----------

Mixalko, уберите довесок \ HTTP/ в конце первой строки.

---------- Добавлено 23.08.2016 в 18:53 ----------

Если «в поиске появилось много страниц», то адресацию теперь уже лучше не трогать. Нужно было раньше думать. Теперь только так или редирект.

1. У меня уже стоит код:

RewriteEngine on

RewriteBase /

RewriteCond %{HTTP_HOST} ^www\.site.ru [NC]

RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/

RewriteRule ^index\.php$ http://site.ru/ [R=301,L]

это ведь 301 редирект с index.php на главную и убирает слеш в конце на главной.

3. Подскажите как тогда сделать редирект с site.ru/?id=pade на site.ru/index.php?id=pade

2. довесок \ HTTP/ убрал в верху урл стал выглядеть site.ru/?id=pade, а на странице при наведении на ссылку site.ru/index.php?id=pade - поисковики такое не воспримут за дубли?

И ещё, ввёл адрес так site.ru/?=pade и он тоже есть. А здесь какой редирект должен быть?

12 3

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