ЧПУ в htacces нужно ли делать редиректы со старых урл, если дублируют страницу?
После создания ЧПУ в htacces нужно ли делать редиректы со старых урл, если дублируют страницу? вот такого вида команда в htaccess:
RewriteEngine on RewriteRule ^([^/.]+)/?$ ?page=$1 [L] И если нужно, то как зделать одной командой, не перечисляя каждую страницу в 301 редиректе..? |
А старый вид адресов такой?
site.ru/?page=index |
да....
|
Попробуйте так:
RewriteRule \?page=(.)$ https://site.ru/$1 [R=301,L] |
написать этот код его вместо моего в htaccess или добавить его просто?
|
Zhenyaxxxx, в конец или после RewriteEngine on.
Если не получится, то почитайте: https://pixelplus.ru/samostoyatelno/...-redirekt.html |
Nexus,
не нужно тут полного адреса. |
Еще подскажите... какой должен быть результат после написания кода...
После перехода по ссылке site.ru/?page=index - перекидывать меня на site.ru/index ? |
Вроде так должно быть.
RewriteEngine on RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC] RewriteRule ^$ /%1? [R=301,L] RewriteRule ^([^/.]+)/?$ ?page=$1 [L] |
Если так как вы написали:
RewriteEngine on RewriteCond %{QUERY_STRING} ^page=(.*)$ [NC] RewriteRule ^$ /%1? [R=301,L] RewriteRule ^([^/.]+)/?$ ?page=$1 [L] то вообще отключается... пишет слишком много переадрисаций... |
На счет переадресаций не знаю.
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 |
Действительно в адресной строке происходит переадресация, но сайт вырубается, после написания вашего кода..... вот такой 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 |
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 ошибку выдает... |
Ничего не получается... что делать....
|
Цитата:
|
Подскажите, пожалуйста, как это сделать ? как выполнить get_headers извне..
|
Zhenyaxxxx,
Цитата:
Ну или ищете другой сервер и выполняйте на нем функцию get_headers. Если на вашем сервере есть хотя бы 1 страница (если нет, то сделать такую, я думаю, не сложно), которая открывается, то можете с этой страницы отправить запрос на свой сервер используя названную функцию. |
Цитата:
print_r(get_headers(url запроса, 1)); |
Когда ввожу в проверку урл 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.... Что это может означать...? |
Цитата:
Ваш кэп. Теперь смотрите какие заголовки вернет запрос на адрес "https://ensy.com.ua/" (спойлер: редиректа нет). Если на сайте у вас ранее был редирект со страницы "https://ensy.com.ua/" на "https://ensy.com.ua/index.php", то стоит очистить dns cache браузера или попробовать зайти на ваш сайт с другого браузера. |
Так у меня ж в 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/страница я уже чистил кэш браузера и заходил другого браузера.... |
Цитата:
Код, что я вам давал рабочий, проверял. Если после добавления кода в htaccess сервер не отвечает на запрос, то смотрите его логи. ps. у вас явно не десятки человек постоянно онлайн, так почему не добавить "кривой" код в htaccess и отладить его сразу? Дело 10, максимум, минут. |
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мин.....Пока только учусь...) единственное что я вижу тут, что соединение закрыто... |
Сейчас стоит "кривой" код в htaccess... получается что при https://site.ru/страница и при https://site.ru/?page=страница происходит редирект 301 на https://site.ru/страница
|
Цитата:
|
вот он весь...
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 |
Zhenyaxxxx, забейте вы на это, определите правила только для новых url, перенаправляя старые как и ранее на тот же обработчик, то есть на надо перенаправлений многократных (вы практически зацикливаете сервер запросами, от этого и предупреждение). Добавьте в заголовки страниц <link rel="canonical" href="адрес ЧПУ этой страницы"/> (подробнее тут, тоже самое и у Яндекса). Со временем в индексе будут только новые адреса, о старых можно будет забыть, тем более что у вас пользователей уж точно не тысячами.
|
Цитата:
|
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] |
Nexus, заменил htaccess вашим и ЧПУ не работают....пишет не найдена страница на сервере... нужно ж было все заменить?
Все остальные команды - супер... они укоротили мой код в htaccess... |
Zhenyaxxxx, у вас точка входа - index.php?
|
Цитата:
|
Zhenyaxxxx, какой файл все запрос обрабатывает?
|
index.php обрабатывает... потом уже в htaccess я его прячу... и после этого переключаю страницы SWITH
/?page=страница После ввода кода в htaccess: RewriteEngine on RewriteRule ^([^/.]+)/?$ ?page=$1 [L] переделал все ссылки на чпу |
Zhenyaxxxx, ок, если так, то index.php должен получать запрос с get-параметром page.
В index.php в начало вставьте это: var_dump(isset($_GET['page'])?$_GET['page']:'not-set'); exit; И посмотрите, что выведет. |
string(9) "index.php"
|
index.php - это название страницы в Базе данных из которой я вытягиваю наполнение главной
то есть по старому адресс мог бы звучать так: site.com/?page=index.php |
Цитата:
|
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] |
в урле такого не бывает: site.com/?page=index.php
написал такое условие: $page = empty($_GET['page']) ? 'index.php' : $_GET['page']; |
Часовой пояс GMT +3, время: 06:49. |