Если вам нравится SbUP Форум, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....

 

Заменить раширение php на html в Битриксе

Автор ewdokimow, 04-03-2013, 18:19:11

« назад - далее »

Вебнет

#30
Цитата: parmactep от 21-03-2013, 14:13:01
а почему вы тогда для index.php не делаете такое же условие? :o

Потому что, если нет файла index.php (как и любого другого) или запрошенной папки, то проблемы нет (пример выше был), такой запрос обработает /bitrix/urlrewrite.php, но если нет и самого /bitrix/urlrewrite.php, то сервер зациклит таким запросом, потому так нужна эта строка RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ конечно это актуально только в битриксе.

В некоторых, скажем так "новостных движках" основанных на корневом index.php, попробуй удали index.php, весь сайт упадет тут же.

Добавлено: 21-03-2013, 14:22:55


Цитата: parmactep от 21-03-2013, 14:13:01
Куда мне глупому и не опытному...

И вас вылечим :)
  •  


ewdokimowTopic starter

Вебнет и parmactep, Вы ведете очень интересную и познавательную дискуссию. Очень много нового для себя узнал. Спасибо.
Андрей
  •  


parmactep

#32
Цитата: Вебнет от 21-03-2013, 14:20:53И вас вылечим
Вы себе не представляете как я благодарен вашим советам и пояснениям ;)
ewdokimow, для этого и ведем собственно... Тем более насколько я понял вы свой вопрос решили, поэтому можем себе позволить совсем чуть-чуть увести тему в сторону...

Добавлено: 21-03-2013, 18:44:10


Вебнет, к вам есть следующий вопрос....
ЦитироватьRewriteRule ^(.*)\.php$ /$1.html [R=301,L]
Чем вам отсутствие слеша не понравилось?
  •  

Вебнет

Цитата: parmactep от 21-03-2013, 18:39:58
Вы себе не представляете как я благодарен вашим советам и пояснениям ;)
ewdokimow, для этого и ведем собственно... Тем более насколько я понял вы свой вопрос решили, поэтому можем себе позволить совсем чуть-чуть увести тему в сторону...

Добавлено: 21-03-2013, 18:44:10


Вебнет, к вам есть следующий вопрос....Чем вам отсутствие слеша не понравилось?

Хм.. вопрос не мой, но за благодарность, спасибо.
Теперь к RewriteRule ^(.*)\.php$ /$1.html [R=301,L] , нравится или нет - это не вопрос, а вот в плане работает или нет, уже теплее. А работает он только со слешем.
Разберем первую часть ^(.*)\.php$ (регулярное выражение):
тут
^ - маркер начала строки по сути обозначает корень сайта, т.е.  "/"
(.*) - любой символ (вхождением от 0 до бесконечности раз, любая строка или ее отсутсвие)
\.php - хвост ".php"
$ - маркер конца строки

Далее /$1.html
/ - корень
$1 - маркер строки заменяемы тем что внутри скобок (.*), если скобок несколько, то маркеры для них от $1 до $N
.html  - хвост

Пример:
Запрашиваем /test/index.php
разбор
^ = /
(.*) = test/index = $1 (как видно слеша нет)
\.php = .php

результат /test/index.html

Если взять без регулярки, тот же редирект будет выглядеть так:
RewriteRule ^test/index.php$ /test/index.html [R=301,L]

Ну и конечно пробуем и тестирует на реальном сервере, не на рабочем проекте конечно, а на тестовой версии. :)
  •  

parmactep

#34
Цитата: Вебнет от 21-03-2013, 20:43:41^ - маркер начала строки по сути обозначает корень сайта, т.е.  "/"
Мне кажется или у вас здесь закралась ошибка?
^ - действительно маркер начала строки... Но никак не /
Давайте разберем что получает RewriteRule и как он работает...

Добавлено: 21-03-2013, 22:48:39


в RewriteRulу передается не ссылка а относительный путь к запрашиваемому файлу.... Причем относительным к месту расположения файла .htacess
Вы же задаете путь относительно корня сайта

Добавлено: 21-03-2013, 23:15:47


За слеш (если быть точнее, то за абсолютный путь к файлу) "отвечает" RewriteBase в котором указывается путь от корня сайта до файла .htacess ... В случае если .htacess находится в корне сайта, то это выглядит следующим образом
RewriteBase /
Причем стоит отметить что использование RewriteBase является обязательным в случае если задействован mod_rewrite... Иначе не избежать проблем с редиректами....
  •  


ewdokimowTopic starter

Цитата: parmactep от 21-03-2013, 18:39:58
ewdokimow, для этого и ведем собственно... Тем более насколько я понял вы свой вопрос решили, поэтому можем себе позволить совсем чуть-чуть увести тему в сторону...
Вопросов еще много, по мере сил стараюсь решать.
Андрей
  •  

Вебнет

Цитата: parmactep от 21-03-2013, 22:32:20
Мне кажется или у вас здесь закралась ошибка?
^ - действительно маркер начала строки... Но никак не /
Давайте разберем что получает RewriteRule и как он работает...

Добавлено: 21-03-2013, 22:48:39


в RewriteRulу передается не ссылка а относительный путь к запрашиваемому файлу.... Причем относительным к месту расположения файла .htacess
Вы же задаете путь относительно корня сайта

Добавлено: 21-03-2013, 23:15:47


За слеш (если быть точнее, то за абсолютный путь к файлу) "отвечает" RewriteBase в котором указывается путь от корня сайта до файла .htacess ... В случае если .htacess находится в корне сайта, то это выглядит следующим образом
RewriteBase /

Начну с того что мы с вами обсуждаем не общий случай с абстрактным .htaccess а частный для CMS Битрикс.
Поэтому рассматривается вопрос о файле .htaccess находящемся в корне сайта по умолчанию и имеющем стандартное содержание:

Options -Indexes
Errordоcument 404 /404.php

<IfModule mod_php5.c>
  php_flag session.use_trans_sid off
  php_value display_errors 1
  #php_value mbstring.internal_encoding UTF-8
</IfModule>

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
  RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

<IfModule mod_dir.c>
  DirectoryIndex index.php index.html
</IfModule>

<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresByType image/jpeg "access plus 3 day"
  ExpiresByType image/gif "access plus 3 day"
  ExpiresByType image/png "access plus 3 day"
  ExpiresByType text/css "access plus 3 day"
  ExpiresByType application/javascript "access plus 3 day" 
</IfModule>


Как видим RewriteBase / здесь нет, отсюда вывод: ваше решение у пользователей не работает. А RewriteRule ^(.*)\.php$ /$1.html [R=301,L] было проверено на рабочем сервере с установленным Битриксом.

Ну, а если все же поставить RewriteBase / , то вот эта строка RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] (вокруг которой было столько разговоров ранее) будет редиректить на //bitrix/urlrewrite.php
И я не уверен, что такой запрос корректно отработает.

Совет всем: Подходите ответственнее к тому, что советуете людям, думайте и проверяйте прежде чем что либо написать.

Цитата: parmactep от 21-03-2013, 22:32:20
Причем стоит отметить что использование RewriteBase является обязательным в случае если задействован mod_rewrite... Иначе не избежать проблем с редиректами....
По поводу обязательности этого правила, это кому как удобнее если вы используете, хорошо, но другие не обязаны этого делать.
Тут вы сами и ответили на свой вопрос, почему просто RewriteRule ^(.*)\.php$ $1.html [R=301,L] без слеша не работает в данном случае.
  •  

parmactep

#37
Вы опять потом будете говорить что я некоректно вопросы задаю...
Повторюсь:
так как RewriteRule работает с относительным путем использование RewriteBase является обязательным

Добавлено: 22-03-2013, 11:10:13


Цитата: Вебнет от 22-03-2013, 10:10:50Начну с того что мы с вами обсуждаем не общий случай с абстрактным .htaccess а частный для CMS Битрикс.
Нуну.... А потом возникает вопрос "Я делаю, а нихрена не работает"...
Нужно изначально делать ПРАВИЛЬНО, а не часными случаями.... Я вам конкретно рассказал о том с чем работет RewriteRule и почему так а не иначе.... А от вас только увидел что ^ = /

  •  


Вебнет

Цитата: parmactep от 22-03-2013, 10:48:49
Вы опять потом будете говорить что я некоректно вопросы задаю...
Повторюсь:
так как RewriteRule работает с относительным путем использование RewriteBase является обязательным

То что для вас обязательно, для других нет, или даже вредно в какой-то конкретной ситуации.
Попробуйте на реальном сервере, с установленной CMS Битрикс разные варианты. Тогда и будем разговаривать.
Пока я  от вас слышу вопросы: Почему я не прав? диалог считаю бессмысленным. Я пишу огромные маны на "Почему?", но пока вы не попробуете сделать что-то сами и не получите результат, мне вас не переубедить. :)

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

Ваше решение я подогнал под то что есть.
Тогда вы не написали его полностью и оно у пользователей не работало, это ваш промах, уж извините:

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


Желательно конечно в рамках списка всех правил .htaccess стандартного для данной CMS, и после реальной проверки, но хотя бы так.
  •  

parmactep

Цитата: Вебнет от 22-03-2013, 11:19:19но пока вы не попробуете сделать что-то сами и не получите результат, мне вас не переубедить
Уважаемый... Открою маленький секрет... Я уже более восьми лет пробую подобные вещи на реальных проектах... ;) Многие люди говорят что весьма успешно)))
RewriteBase является обязательным хотя бы потому что имеет значение по-умолчанию зависящее от настроек сервера.
И вредным на самом деле может быть только его отсутствие...
Как вы там говорили? Погуглите, мануалы почитайте..... Тогда ваш опыт+эксперемент подкрепится еще и знаниями внутренних механизмов используемых вами технологий....
  •  



Если вам нравится SbUP Форум, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....