Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   ЧПУ в htacces нужно ли делать редиректы со старых урл, если дублируют страницу? (https://javascript.ru/forum/server/75876-chpu-v-htacces-nuzhno-li-delat-redirekty-so-starykh-url-esli-dubliruyut-stranicu.html)

Zhenyaxxxx 14.11.2018 11:48

ЧПУ в htacces нужно ли делать редиректы со старых урл, если дублируют страницу?
 
После создания ЧПУ в htacces нужно ли делать редиректы со старых урл, если дублируют страницу? вот такого вида команда в htaccess:

RewriteEngine on

RewriteRule ^([^/.]+)/?$ ?page=$1 [L]

И если нужно, то как зделать одной командой, не перечисляя каждую страницу в 301 редиректе..?

Nexus 14.11.2018 12:09

А старый вид адресов такой?
site.ru/?page=index

Zhenyaxxxx 14.11.2018 12:16

да....

Nexus 14.11.2018 12:22

Попробуйте так:
RewriteRule \?page=(.)$ https://site.ru/$1 [R=301,L]

Zhenyaxxxx 14.11.2018 12:25

написать этот код его вместо моего в htaccess или добавить его просто?

Nexus 14.11.2018 12:26

Zhenyaxxxx, в конец или после RewriteEngine on.
Если не получится, то почитайте: https://pixelplus.ru/samostoyatelno/...-redirekt.html

laimas 14.11.2018 12:29

Nexus,
не нужно тут полного адреса.

Zhenyaxxxx 14.11.2018 12:39

Еще подскажите... какой должен быть результат после написания кода...
После перехода по ссылке site.ru/?page=index - перекидывать меня на site.ru/index ?

Nexus 14.11.2018 12:42

Вроде так должно быть.
RewriteEngine on

RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC]
RewriteRule ^$ /%1? [R=301,L]

RewriteRule ^([^/.]+)/?$ ?page=$1 [L]

Zhenyaxxxx 14.11.2018 12:48

Если так как вы написали:

RewriteEngine on

RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC]
RewriteRule ^$ /%1? [R=301,L]

RewriteRule ^([^/.]+)/?$ ?page=$1 [L]


то вообще отключается... пишет слишком много переадрисаций...

Nexus 14.11.2018 13:04

На счет переадресаций не знаю.
https://htaccess.madewithlove.be?sha...b-067a80a8babd

upd. если все равно редиректит, то можно так еще попробовать:
RewriteEngine on

RewriteCond %{QUERY_STRING} !^__no-redirect$ [NC]
RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC]
RewriteRule ^(.*?)\/?$ "$1/%1?" [R=301,L]

RewriteRule ^(.+?)\/?$ ?__no-redirect&page=$1 [L]

https://htaccess.madewithlove.be?sha...7-c940adca1c17

Zhenyaxxxx 14.11.2018 13:20

Действительно в адресной строке происходит переадресация, но сайт вырубается, после написания вашего кода..... вот такой htaccess:

AddDefaultCharset UTF-8

# переход на версию без www:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.ensy\.com.ua$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ https://ensy.com.ua/$1 [R=301,L]

# переадресация с index.php на /:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://ensy.com.ua/ [R=301,L]

# переадресация с http на https:
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://ensy.com.ua/$1 [R=301,L]


# сжатие text, html, javascript, css, xml:
<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

# ЧПУ
RewriteEngine on
RewriteRule ^([^/.]+)/?$ ?page=$1 [L]


# 404
RewriteEngine on
ErrorDocument 404 https://ensy.com.ua/block/404.php

Zhenyaxxxx 14.11.2018 13:32

RewriteEngine on

RewriteCond %{QUERY_STRING} !^__no-redirect$ [NC]
RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC]
RewriteRule ^(.*?)\/?$ "$1/%1?" [R=301,L]

RewriteRule ^(.+?)\/?$ ?__no-redirect&page=$1 [L]


а так 500 ошибку выдает...

Zhenyaxxxx 15.11.2018 18:35

Ничего не получается... что делать....

laimas 16.11.2018 05:00

Цитата:

Сообщение от Zhenyaxxxx
что делать....

Выполнить get_headers извне чтобы понять какую карусель вы устраиваете - "# переадресация с index.php на /:", то есть по вашему https://ensy.com.ua/, это будет запрос не https://ensy.com.ua/index.php?

Zhenyaxxxx 16.11.2018 09:57

Подскажите, пожалуйста, как это сделать ? как выполнить get_headers извне..

Nexus 16.11.2018 10:04

Zhenyaxxxx,
Цитата:

Сообщение от Zhenyaxxxx
как выполнить get_headers извне..

https://www.webconfs.com/http-header-check.php
Ну или ищете другой сервер и выполняйте на нем функцию get_headers.
Если на вашем сервере есть хотя бы 1 страница (если нет, то сделать такую, я думаю, не сложно), которая открывается, то можете с этой страницы отправить запрос на свой сервер используя названную функцию.

laimas 16.11.2018 10:33

Цитата:

Сообщение от Zhenyaxxxx
как это сделать ?

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

print_r(get_headers(url запроса, 1));

Zhenyaxxxx 16.11.2018 10:34

Когда ввожу в проверку урл https://ensy.com.ua/index.php
то показывает такой ответ:

HTTP/1.1 301 Moved Permanently => 
Server => nginx
Date => Fri, 16 Nov 2018 07:43:03 GMT
Content-Type => text/html; charset=iso-8859-1
Content-Length => 228
Connection => close
Location => https://ensy.com.ua/
Front-End-Https => on
Strict-Transport-Security => max-age=300;


ПРоисходит 301 редирект на урл без index.... Что это может означать...?

Nexus 16.11.2018 10:46

Цитата:

Сообщение от Zhenyaxxxx
ПРоисходит 301 редирект на урл без index.... Что это может означать...?

То что пользователя перенаправит на адрес без "index.php".
Ваш кэп.

Теперь смотрите какие заголовки вернет запрос на адрес "https://ensy.com.ua/" (спойлер: редиректа нет).
Если на сайте у вас ранее был редирект со страницы "https://ensy.com.ua/" на "https://ensy.com.ua/index.php", то стоит очистить dns cache браузера или попробовать зайти на ваш сайт с другого браузера.

Zhenyaxxxx 16.11.2018 11:01

Так у меня ж в htaccess прописан редирект с index.php на /...или вы не об этом..... Вы имеете ввиду что этот редирект и вызывает ошибку после добавления кода


RewriteEngine on

RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC]
RewriteRule ^$ /%1? [R=301,L]

RewriteRule ^([^/.]+)/?$ ?page=$1 [L]


для переадресации с https://ensy.com.ua/?page=страница на https://ensy.com.ua/страница


я уже чистил кэш браузера и заходил другого браузера....

Nexus 16.11.2018 11:29

Цитата:

Сообщение от Zhenyaxxxx
Вы имеете ввиду что этот редирект и вызывает ошибку после добавления кода

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

Код, что я вам давал рабочий, проверял.
Если после добавления кода в htaccess сервер не отвечает на запрос, то смотрите его логи.

ps. у вас явно не десятки человек постоянно онлайн, так почему не добавить "кривой" код в htaccess и отладить его сразу? Дело 10, максимум, минут.

Zhenyaxxxx 16.11.2018 12:11

Nexeus, спасибо вам за ваше внимание, показываю результат проверки:

HTTP/1.1 301 Moved Permanently => 
Server => nginx
Date => Fri, 16 Nov 2018 09:19:46 GMT
Content-Type => text/html; charset=iso-8859-1
Content-Length => 235
Connection => close
Location => https://ensy.com.ua/objecti
Front-End-Https => on
Strict-Transport-Security => max-age=300;


Если бы 10мин.....Пока только учусь...) единственное что я вижу тут, что соединение закрыто...

Zhenyaxxxx 16.11.2018 12:20

Сейчас стоит "кривой" код в htaccess... получается что при https://site.ru/страница и при https://site.ru/?page=страница происходит редирект 301 на https://site.ru/страница

Nexus 16.11.2018 12:26

Цитата:

Сообщение от Zhenyaxxxx
Сейчас стоит "кривой" код в htaccess

Напишите его полностью здесь.

Zhenyaxxxx 16.11.2018 12:36

вот он весь...
AddDefaultCharset UTF-8

# переход на версию без www:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.ensy\.com.ua$ [NC]
RewriteCond %{REQUEST_URI} !^/robots.*
RewriteRule ^(.*)$ https://ensy.com.ua/$1 [R=301,L]

# переадресация с index.php на /:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://ensy.com.ua/ [R=301,L]

# переадресация с http на https:
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://ensy.com.ua/$1 [R=301,L]


# сжатие text, html, javascript, css, xml:
<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

# ЧПУ
#RewriteEngine on
#RewriteRule ^([^/.]+)/?$ ?page=$1 [L]

RewriteEngine on
RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC]
RewriteRule ^$ /%1? [R=301,L]
RewriteRule ^([^/.]+)/?$ ?page=$1 [L]



# 404
RewriteEngine on
ErrorDocument 404 https://ensy.com.ua/block/404.php

laimas 16.11.2018 12:47

Zhenyaxxxx, забейте вы на это, определите правила только для новых url, перенаправляя старые как и ранее на тот же обработчик, то есть на надо перенаправлений многократных (вы практически зацикливаете сервер запросами, от этого и предупреждение). Добавьте в заголовки страниц <link rel="canonical" href="адрес ЧПУ этой страницы"/> (подробнее тут, тоже самое и у Яндекса). Со временем в индексе будут только новые адреса, о старых можно будет забыть, тем более что у вас пользователей уж точно не тысячами.

Zhenyaxxxx 16.11.2018 12:57

Цитата:

Сообщение от laimas
Zhenyaxxxx, забейте вы на это, определите правила только для новых url, перенаправляя старые как и ранее на тот же обработчик, то есть на надо перенаправлений многократных (вы практически зацикливаете сервер запросами, от этого и предупреждение). Добавьте в заголовки страниц <link rel="canonical" href="адрес ЧПУ этой страницы"/> (подробнее тут, тоже самое и у Яндекса). Со временем в индексе будут только новые адреса, о старых можно будет забыть, тем более что у вас пользователей уж точно не тысячами.

вот это, то что я и искал.... век живи век учись))) дякую)))

Nexus 16.11.2018 13:01

AddDefaultCharset UTF-8

# Rewrite http -> https
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Rewrite [url]www.example.com[/url] -> example.com
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

# переадресация с index.php на /:
RewriteRule ^index\.php$ https://%{HTTP_HOST}/ [R=301,L]


# Rewrite /?page=index -> /index
RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC]
RewriteRule ^(.*?)\/?$ "$1/%1?" [R=301,L]

# ЧПУ
RewriteRule ^(.+)\/?$ index.php?page=$1 [QSA,L]


# сжатие text, html, javascript, css, xml:
<ifModule mod_deflate.c>
	AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>


# 404
ErrorDocument 404 [url]https://ensy.com.ua/block/404.php[/url]

Zhenyaxxxx 16.11.2018 13:22

Nexus, заменил htaccess вашим и ЧПУ не работают....пишет не найдена страница на сервере... нужно ж было все заменить?

Все остальные команды - супер... они укоротили мой код в htaccess...

Nexus 16.11.2018 13:34

Zhenyaxxxx, у вас точка входа - index.php?

Zhenyaxxxx 16.11.2018 13:39

Цитата:

Сообщение от Nexus
Zhenyaxxxx, у вас точка входа - index.php?

Что это значит? для дураков...

Nexus 16.11.2018 13:39

Zhenyaxxxx, какой файл все запрос обрабатывает?

Zhenyaxxxx 16.11.2018 13:46

index.php обрабатывает... потом уже в htaccess я его прячу... и после этого переключаю страницы SWITH
/?page=страница
После ввода кода в htaccess:
RewriteEngine on
RewriteRule ^([^/.]+)/?$ ?page=$1 [L]


переделал все ссылки на чпу

Nexus 16.11.2018 13:52

Zhenyaxxxx, ок, если так, то index.php должен получать запрос с get-параметром page.
В index.php в начало вставьте это:
var_dump(isset($_GET['page'])?$_GET['page']:'not-set');
exit;

И посмотрите, что выведет.

Zhenyaxxxx 16.11.2018 13:59

string(9) "index.php"

Zhenyaxxxx 16.11.2018 14:03

index.php - это название страницы в Базе данных из которой я вытягиваю наполнение главной

то есть по старому адресс мог бы звучать так: site.com/?page=index.php

laimas 16.11.2018 14:15

Цитата:

Сообщение от Zhenyaxxxx
site.com/?page=index.php

Уже плохо, так как site.com/ это и есть запрос индексной страницы.

Nexus 16.11.2018 14:18

Zhenyaxxxx, попробуйте так:
AddDefaultCharset UTF-8

DirectoryIndex index.php

# ЧПУ
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)\/?$ index.php?__no-redirect&page=$1 [QSA,L]

# Rewrite http -> https
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Rewrite [url]www.example.com[/url] -> example.com
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

# переадресация с index.php на /:
RewriteCond %{QUERY_STRING} !^__no-redirect$ [NC]
RewriteCond %{REQUEST_URI} ^index\.php [NC]
RewriteRule ^.*$ https://%{HTTP_HOST}/ [R=301,L]


# Rewrite /?page=index -> /index
RewriteCond %{QUERY_STRING} !^__no-redirect$ [NC]
RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC]
RewriteRule ^(.*?)\/?$ "$1/%1?" [R=301,L]



# сжатие text, html, javascript, css, xml:
<ifModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

# 404
ErrorDocument 404 [url]https://ensy.com.ua/block/404.php[/url]

Zhenyaxxxx 16.11.2018 14:20

в урле такого не бывает: site.com/?page=index.php

написал такое условие:

$page = empty($_GET['page']) ? 'index.php' : $_GET['page'];


Часовой пояс GMT +3, время: 06:49.