Форум русской поддержки Joomla!® CMS
06.12.2016, 10:06:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

seo-шный htaccess создает конфликт с правкой модулей с фронта (RewriteRule.* %1.html [r=301, L])

 (Прочитано 642 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« : 10.05.2016, 12:59:04 »

Добрый день.
FAQ смотрел, но не нашел ответа.

Шаблон свой, но этот глюк в точности повторяется на чистой Joomla 3.5.1 и шаблоне Protostar (php 7).
Суть такова
Если с фронтэнда редактировать МАТЕРИАЛ , то всё в порядке.
При попытке редактирования модуля (например меню), то в независмости от того, было ли редактирование или нет, при нажатии на "сохранить" или "отменить" выскакивает ошибка.

Скрин ниже
Показать текстовый блок

Исходный код страницы с ошибкой

Показать текстовый блок

Мой htaccess ниже

Показать текстовый блок

Если закомментировать строку "RewriteRule .* %1.html [R=301,L]" то всё в порядке ("сохранить" и "отменить" работают)

Ниже лог запросов на Апач, при ПРАВИЛЬНОМ развитии ситуации.

Показать текстовый блок

В теме с факом была похожая проблема http://joomlaforum.ru/index.php/topic,223542.msg1399877.html#msg1399877
Попытка решения вот так не дала результатов
RewriteCond %{REQUEST_URI} !^/component/.*/$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]


Подозреваю, что тут нужно что-то исключить из редиректа, но не могу понять что.

Есть какие соображения?




Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #1 : 10.05.2016, 14:40:58 »

Попробуйте переписать:
Код:
# Убираем index.php
RewriteRule ^index\.php(/.*)$ $1 [R=301,L]
Код:
#Редирект  со страниц site.ru/article и site.ru/article/ на страницу site.ru/article.html
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /$1.html [R=301,L]
В robots.txt дописать:
Код:
Disallow: /index.php
« Последнее редактирование: 10.05.2016, 14:46:36 от Филипп Сорокин » Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #2 : 10.05.2016, 14:53:55 »

Попробуйте переписать:
Код:
# Убираем index.php
RewriteRule ^index\.php(/.*)$ $1 [R=301,L]
Код:
#Редирект  со страниц site.ru/article и site.ru/article/ на страницу site.ru/article.html
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /$1.html [R=301,L]
В robots.txt дописать:
Код:
Disallow: /index.php

Попробовал.
Если в первом случае (скрин из первого поста) в адресной строке страницы с ошибкой стоит http://site.ru/component/config.html (скрин в первом посте)
то сейчас та же ошибка, но в адресной строке при этом http://site.ru/component/config/.html
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #3 : 10.05.2016, 14:55:24 »

Кэш браузера очистить не забыли? 301-е редиректы кэшируются.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #4 : 10.05.2016, 14:56:55 »

Вот эту строку замените
Цитировать
RewriteRule ^(.+)$ /$1.html [R=301,L]
на
Цитировать
RewriteRule ^(.+)/*$ /$1.html [R=301,L]
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #5 : 10.05.2016, 15:18:21 »

Кэш браузера очистить не забыли? 301-е редиректы кэшируются.
После правки htaccess
- перезапустил OpenServer
- Почистил кэш в Joomla
- Попробовал процедуру в 3-х браузерах (Mozilla, IE9, Chrome) после Alt+F5
Та же ошибка при адресной строке "http://site.ru/component/config/.html"

Такая же строка вылетает и
при RewriteRule ^(.+)$ /$1.html [R=301,L]
при RewriteRule ^(.+)/*$ /$1.html [R=301,L]

Повторюсь, ошибка даже на дефолтной Joomla 3.5.1 и Protostar-е.
т.е. каждый может проверить, работает ли такая конструкция на любом сайте.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #6 : 10.05.2016, 15:27:18 »

Цитировать
RewriteRule ^(.+?)/*$ /$1.html [R=301,L]
А если убрать квантификатор "жадности"?
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #7 : 10.05.2016, 15:37:45 »

А если убрать квантификатор "жадности"?
Если вы про *, то с ней выдаёт ошибку на http://site.ru/component/config/.html
Если а без нее ошибку на http://site.ru/component/config.html
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #8 : 10.05.2016, 15:44:52 »

Я про знак вопроса в скобках. Попробуйте заменить:
Цитировать
RewriteRule ^(.+)/*$ /$1.html [R=301,L]
На
Цитировать
RewriteRule ^(.+?)/*$ /$1.html [R=301,L]
Регулярки в .htaccess бывают очень странными. Я заметил, что они могут не подчиняться некоторым теоретическим моментам. Если не получится, то нужно ещё одну регулярку добавить перед блоком, делающим перенаправление на .html:
Цитировать
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.+?)/+$
RewriteRule .? /%1 [R=301,L]
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #9 : 10.05.2016, 16:02:14 »

Я про знак вопроса в скобках. Попробуйте заменить:НаРегулярки в .htaccess бывают очень странными. Я заметил, что они могут не подчиняться некоторым теоретическим моментам. Если не получится, то нужно ещё одну регулярку добавить перед блоком, делающим перенаправление на .html:
Ошибка на http://site.ru/component/config.html при
блоке
Код:
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/*$ /$1.html [R=301,L]
Ошибка на http://site.ru/component/config.html при
блоке
Код:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.+?)/+$
RewriteRule .? /%1 [R=301,L]
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/*$ /$1.html [R=301,L]
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #10 : 10.05.2016, 16:27:19 »

Стало быть, первый вариант корректно перенаправляет? Ну тогда дело не в рерайтах. Мне кажется, роутер Joomla! не воспринимает префикс .html, если компонент выводится без привязки к пункту меню. Тогда я бы посоветовал такой блок, который будет объединять все правила:

Цитировать
RewriteRule ^index\.php(/.*)$ $1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/+$ /$1 [R=301,L]

RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?!component/)(.+)$ /$1.html [R=301,L]
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #11 : 10.05.2016, 16:45:13 »

Стало быть, первый вариант корректно перенаправляет?
Нет, ни один из предложенных вариантов не делает правильного перенаправления.
Страница с ошибкой либо http://site.ru/component/config.html
либо http://site.ru/component/config/.html
Выход (сохранение) из редактирования модуля корректно работает, только если закоментировать строчку "RewriteRule .* %1.html [R=301,L]" (но так дубли)

Тогда я бы посоветовал такой блок, который будет объединять все правила:
К сожалению такой блок тоже выдает ошибку  http://site.ru/component/config.html
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #12 : 10.05.2016, 16:48:44 »

Цитировать
http://site.ru/component/config.html
Это технически правильное перенаправление. А почему не открывается страница - это уже вопрос отдельный.
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #13 : 10.05.2016, 16:56:46 »

Это технически правильное перенаправление. А почему не открывается страница - это уже вопрос отдельный.
А может не пытаться объять необъятное, а прописать 301 редирект только для пути, указанного при правильном отрабатывании кнопок "сохранить"\"отменить" в редактировании модуля?
Апач пишет следующее в случае успеха
Код:
POST /component/config/ HTTP/1.1" 301 245 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D
GET /component/config.html HTTP/1.1" 500 4032 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D

т.е. пусть весь сайт перенаправляется как нам надо (и он делает так с моим изначальным htaccess-ом), но один адресок пусть обрабатывается без всяких редиректов?
Я пробовал добавить исключение через "!", перебрал несколько вариантов, но мои познания Joomla и htaccess не позволили прийти к правильному решению.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #14 : 10.05.2016, 17:06:46 »

Код:
GET /component/config.html HTTP/1.1" 500 4032 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D
Ошибка 500 в случае успеха? Сомневаюсь, что так оно и должно быть. Я думаю, проблема не в .htaccess. В любом случае не видя сайт сложно что-либо сказать.
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #15 : 10.05.2016, 17:13:55 »

В любом случае не видя сайт сложно что-либо сказать.
Да сайт на локалке, не покажешь.
Еще раз повторюсь, ошибка ИМХО сайтонезависима, т.к. нулячая Joomla 3.5.1. с Протостаром ловят такой глюк, следовательно и все остальные сайты при таком htaccess-е должны глючить (при данной последовательности действий).
Ну, да ладно.Вечером попробую еще потестировать чистую Joomla и протостар со всеми указанными вами вариантами.
Отпишусь тогда позже.
В любом случае спасибо за помощь.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #16 : 10.05.2016, 17:17:36 »

Не знаю. Возможно есть какие-то конфликты рерайта. Копайте в сторону конфига Apache. Может, есть ещё .htaccess выше уровнем? Сам же .htaccess должен быть чистым, редиректы должны быть описаны в правильном месте:

# Begin custom redirects
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #17 : 10.05.2016, 22:35:33 »

Провел своё "исследование".
Исходные данные
- Joomla 3.5.1 - чистая установка
- PHP 7
- Protostar

Попытка выйти из редактирования модуля (отмена, или сохранить)

===================

Код:
Джумловский htaccess (убрал комментарии)

Options +FollowSymlinks
Options -Indexes
RewriteEngine On
RewriteBase /

# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]

## Begin - Custom redirects

## End - Custom redirects


## Begin - Joomla! core SEF Section.
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]


Отрабатывает нормально

Апач
Код:
"POST /component/config/ HTTP/1.1" 303 - "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET / HTTP/1.1" 200 5518 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
========================
Джумловский htaccess + добавка в зоне "custom redirects" (здесь и далее кэши чищены)

Код:
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]

Ошибка. В адресной строке http://site.ru/component/config/.html
Апач
Код:
"POST /component/config/ HTTP/1.1" 301 245 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /component/config.html HTTP/1.1" 500 4032 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /favicon.ico HTTP/1.1" 404 3438 "http://site.ru/component/config.html"

==========================
Джумловский htaccess + добавка в зоне "custom redirects"
Код:
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /$1.html [R=301,L]
Ошибка. В адресной строке http://site.ru/component/config.html
Апач
Код:
"POST /component/config/ HTTP/1.1" 301 246 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /component/config/.html HTTP/1.1" 500 4032 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"

==========================
Джумловский htaccess + добавка в зоне "custom redirects"

Код:
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/*$ /$1.html [R=301,L]

Ошибка. В адресной строке http://site.ru/component/config/.html
Апач
Код:
"POST /component/config/ HTTP/1.1" 301 246 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /component/config/.html HTTP/1.1" 500 4032 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /favicon.ico HTTP/1.1" 301 240 "http://site.ru/component/config/.html"
"GET /favicon.ico.html HTTP/1.1" 404 3318 "http://site.ru/component/config/.html"
======================
Джумловский htaccess + добавка в зоне "custom redirects"

Код:
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/*$ /$1.html [R=301,L]

Ошибка. В адресной строке http://site.ru/component/config.html
Апач
Код:
"POST /component/config/ HTTP/1.1" 301 245 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /component/config.html HTTP/1.1" 500 4032 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
======================
Джумловский htaccess + добавка в зоне "custom redirects"
Код:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.+?)/+$
RewriteRule .? /%1 [R=301,L]
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/*$ /$1.html [R=301,L]

Ошибка. В адресной строке http://site.ru/component/config.html
Апач
Код:
"POST /component/config/ HTTP/1.1" 301 240 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /component/config HTTP/1.1" 301 245 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /component/config.html HTTP/1.1" 500 4032 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
===========================
Джумловский htaccess + добавка в зоне "custom redirects"

Код:
RewriteRule ^index\.php(/.*)$ $1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/+$ /$1 [R=301,L]
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?!component/)(.+)$ /$1.html [R=301,L]

Ошибка. В адресной строке http://site.ru/component/config
Апач
Код:
"POST /component/config/ HTTP/1.1" 301 240 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /component/config HTTP/1.1" 500 4032 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /favicon.ico HTTP/1.1" 301 240 "http://site.ru/component/config"
"GET /favicon.ico.html HTTP/1.1" 404 3318 "http://site.ru/component/config"
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #18 : 10.05.2016, 23:06:32 »

Цитировать
RewriteRule ^index\.php(/.*)$ $1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/+$ /$1 [R=301,L]

RewriteCond %{REQUEST_METHOD} ^GET [NC]
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_URI} !\.ico$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /$1.html [R=301,L]
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #19 : 10.05.2016, 23:37:58 »

RewriteRule ^index\.php(/.*)$ $1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/+$ /$1 [R=301,L]

RewriteCond %{REQUEST_METHOD} ^GET [NC]
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_URI} !\.ico$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /$1.html [R=301,L]
Ошибка. В адресной строке http://site.ru/component/config.html
Апач
"POST /component/config/ HTTP/1.1" 301 240 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /component/config HTTP/1.1" 301 245 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET /component/config.html HTTP/1.1" 500 4032 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #20 : 10.05.2016, 23:43:54 »

Цитировать
RewriteRule ^index\.php(/.*)$ $1 [R=301,L]

RewriteCond %{REQUEST_METHOD} ^GET [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/+$ /$1 [R=301,L]

RewriteCond %{REQUEST_METHOD} ^GET [NC]
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_URI} !\.ico$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /$1.html [R=301,L]
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #21 : 11.05.2016, 00:17:36 »

RewriteRule ^index\.php(/.*)$ $1 [R=301,L]

RewriteCond %{REQUEST_METHOD} ^GET [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/+$ /$1 [R=301,L]

RewriteCond %{REQUEST_METHOD} ^GET [NC]
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_URI} !\.ico$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /$1.html [R=301,L]

Чьёрт побъери - входит и выходит.
Апач
"POST /component/config/ HTTP/1.1" 303 - "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"
"GET / HTTP/1.1" 200 5518 "http://site.ru/index.php?option=com_config&controller=config.display.modules&id=1&return=aHR0cDovL2NsZWFuLnJ1Lw%3D%3D"

дополнительно
- site.ru/index.php - перенаправляет на site.ru
- site.ru/articles/ - перенаправляет на site.ru/articles.html
- site.ru/articles/article-1/ перенаправляет на site.ru/articles/article-1.html

При таком раскладе я так понимаю в robots.txt можно не указывать
Код:
Disallow: /index.php
т.к. index.php и так обрезается на корень. Зачем его исключать из индексации?

Завтра протестирую сайт более детально на работоспособность. Отпишусь.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #22 : 11.05.2016, 00:39:26 »

Аллилуйя!
Цитировать
т.к. index.php и так обрезается на корень. Зачем его исключать из индексации
Может и не надо. Все от ситуации зависит.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #23 : 11.05.2016, 00:46:08 »

Можно ещё попробовать чуточку сократить:

Цитировать
RewriteRule ^index\.php(/.*)$ $1 [R=301,L]

RewriteCond %{REQUEST_METHOD} ^GET [NC]
RewriteCond %{REQUEST_URI} !\.html$ [NC]
RewriteCond %{REQUEST_URI} !\.ico$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/*$ /$1.html [R=301,L]
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #24 : 11.05.2016, 23:12:30 »

Так, пока полет нормальный.
Ниже привожу мой полный htaccess с комментариями

Показать текстовый блок

Обратите внимание, я использовал стандартную ликвидацию index.php

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.ru [R=301,L]

а не предложенную вами связку
RewriteRule ^index\.php(/.*)$ $1 [R=301,L] + Disallow index.php в robots

Не знаю, почему вы предложили такое решение, если работает традиционное.
Роботы-роботами, но htaccess надежней (особенно при заявлениях Google "ну да, роботы есть, но мы МОЖЕМ действовать по своему")

Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #25 : 12.05.2016, 02:08:43 »

Это "традиционное" решение выдаст вам такую же ошибку при любом запросе POST. К тому же, оно не охватывает path_info, урлы типа /index.php/hello-world.
Записан
ChaosHead
Профи
********

Репутация: +381/-10
Offline Offline

Пол: Мужской
Сообщений: 4391



« Ответ #26 : 12.05.2016, 02:26:58 »

Цитировать
Не знаю, почему вы предложили такое решение, если работает традиционное.
Роботы-роботами, но htaccess надежней (особенно при заявлениях Google "ну да, роботы есть, но мы МОЖЕМ действовать по своему")
Но на деле с таким сталкивалось пару человек на миллиард и то неизвестно, правду ли пишу.
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #27 : 12.05.2016, 03:42:49 »

Robots надежный, ни один нормальный поисковик не будет его игнорировать. А вот редирект - всего лишь заголовок, который отдаётся клиенту. Этот заголовок говорит: "Перейди на другую страницу". Клиент может и проигнорировать. Так что надежность тут совершенно одинаковая.
Записан
ice99
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 91


« Ответ #28 : 12.05.2016, 11:31:11 »

Это "традиционное" решение выдаст вам такую же ошибку при любом запросе POST. К тому же, оно не охватывает path_info, урлы типа /index.php/hello-world.
Думаю вы правы, но тем не менее у меня работают следующие вещи:
1. Отправка стандартной Joomla-вской формы контактов (ошибка не выдаётся, в Openserver-е текст письма складывается в нужную папочку)
2. Своя Аяксовская форма со следующим обработчиком тоже отправляет письма
Текст моего обработчика
Показать текстовый блок

Я не сильный спец, но запросы "POST" насколько я вижу в скриптах присутствуют, и отрабатывают.

url типа "/index.php/hello-world" на стороне пользователя образоваться не может (в Joomla включены ЧПУ), возможно где-то в бэкэнде админки, но пока я не "поймал" такой ошибки.


 
Записан
Филипп Сорокин
Живу я здесь
******

Репутация: +120/-3
Offline Offline

Пол: Мужской
Сообщений: 1451


« Ответ #29 : 12.05.2016, 11:47:42 »

Если у вас включены СЕФ ссылки, то несеф ссылки всё равно остаются. То есть, присутствуют и те, и другие. POST запрос я имел в виду на /index.php. Можно немного изменить директиву, чтобы подстраховаться:

Цитировать
RewriteCond %{THE_REQUEST} ^GET\ /index\.php\ HTTP [NC]

Но опять же, это не будет затрагивать несеф ссылки.
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet