301 редирект(перевести все страницы c php html)

M5
На сайте с 28.12.2005
Offline
135
5405

Приветствую вас коллеги.

Столкнулся с проблемой. Необходимо все страницы сайта с расширением .php перевести в .html

Пробовал и не работает:

1. RedirectMatch 301 (.*)\.php$ http://www.example.com$1.html

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

Прошу помочь решить проблему!

gormarket
На сайте с 29.12.2010
Offline
47
#1

Вы немного перепутали: сначала идет "что есть" и затем "что нужно"


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

(и перед точкой в регулярном выражении нужно поставить \ чтоб это была точка, а не "любой символ")

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
M5
На сайте с 28.12.2005
Offline
135
#2
gormarket:
Вы немного перепутали: сначала идет "что есть" и затем "что нужно"

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

(и перед точкой в регулярном выражении нужно поставить \ чтоб это была точка, а не "любой символ")

Попробовал, не работает:(

gormarket
На сайте с 29.12.2010
Offline
47
#3
Michael-5:
Попробовал, не работает

У Вас реврайт включен, есть в файле .htaccess такие строки?

RewriteEngine On

RewriteBase /

Если не задана база

RewriteBase /

то без / перед $1.html работать не будет, нужно так


RewriteRule ^(.*)\.php /$1.html [R=301,L]
M5
На сайте с 28.12.2005
Offline
135
#4

Сейчас вот так:

RewriteEngine On

RewriteBase /

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

не работает:(

gormarket
На сайте с 29.12.2010
Offline
47
#5

Тогда давайте уточним, что Вам нужно

Необходимо все страницы сайта с расширением .php перевести в .html

Я это понял так, что у Вас сейчас обращение к сайту идет на страницы

.php, а Вы хотите чтобы при этом посетителей перебрасывало на страницы с .html.

Так ?

Если так, то у Вас сайт сейчас отображает страницы, если обратиться сразу напрямую на .html ?

M5
На сайте с 28.12.2005
Offline
135
#6
gormarket:
Тогда давайте уточним, что Вам нужно

Я это понял так, что у Вас сейчас обращение к сайту идет на страницы
.php, а Вы хотите чтобы при этом посетителей перебрасывало на страницы с .html.

Так ?

Если так, то у Вас сайт сейчас отображает страницы, если обратиться сразу напрямую на .html ?

Вот так работает(и стоит), но отдает 302 вместо 301:

RewriteEngine On

Rewritebase /

RewriteRule ^index.html$ index.php [L,NE]

RewriteRule ^(.*).html $1.php [QSA,L]

gormarket
На сайте с 29.12.2010
Offline
47
#7
Michael-5:
RewriteRule ^index.html$ index.php [L,NE]
RewriteRule ^(.*).html $1.php [QSA,L]

эти строки не дают 302 редирект, они отдают содержимое файлов .php если запросить файл .html, но если обратиться по адресу с .php, то они прекрасно отдаются, что вызывает дублирование страниц (.html и с .php).

Чтобы не отдавались страницы с адресами на .php, а редиректило на .html, попробуйте так


RewriteRule ^(.*)\.php http://www.example.com/$1.html [R=301,L]
M5
На сайте с 28.12.2005
Offline
135
#8
gormarket:
эти строки не дают 302 редирект, они отдают содержимое файлов .php если запросить файл .html, но если обратиться по адресу с .php, то они прекрасно отдаются, что вызывает дублирование страниц (.html и с .php).


Чтобы не отдавались страницы с адресами на .php, а редиректило на .html, попробуйте так

RewriteRule ^(.*)\.php http://www.example.com/$1.html [R=301,L]

Сейчас вот так:

RewriteEngine On

Rewritebase /

RewriteRule ^(.*)\.php http://www.example.ru/$1.html [R=301,L]

Но на php тоже отдает страницы.

Т.е редиректит, но php страницы тоже отдает.

gormarket
На сайте с 29.12.2010
Offline
47
#9
Michael-5:
Но на php тоже отдает страницы.

Почему-то не помогает "http://"...

в строке

RewriteRule ^(.*)\.php http://www.example.com/$1.html [R=301,L]

php заменяется на html, а потом в следующих строках (на следующем проходе по файлу) html перезаписывается снова на php.

Можно попробовать при преобразованиях назначать переменную, и проверять ее, чтоб не произошло обратного преобразования.


RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_WasHTML} !^yes$
RewriteRule ^(.*)\.php http://www.example.com/$1.html [R=301,L,E=WasPHP:yes]

RewriteCond %{ENV:REDIRECT_WasPHP} !^yes$
RewriteRule ^(.*)\.html $1.php [QSA,L,E=WasHTML:yes]

строку

RewriteRule ^index.html$ index.php [L,NE]

можно выкинуть, этот вариант тоже обрабатывает вторая строка (RewriteRule ^(.*).html $1.php [QSA,L])

M5
На сайте с 28.12.2005
Offline
135
#10
gormarket:
Почему-то не помогает "http://"...


в строке
RewriteRule ^(.*)\.php http://www.example.com/$1.html [R=301,L]
php заменяется на html, а потом в следующих строках (на следующем проходе по файлу) html перезаписывается снова на php.

Можно попробовать при преобразованиях назначать переменную, и проверять ее, чтоб не произошло обратного преобразования.


RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_WasHTML} !^yes$
RewriteRule ^(.*)\.php http://www.example.com/$1.html [R=301,L,E=WasPHP:yes]

RewriteCond %{ENV:REDIRECT_WasPHP} !^yes$
RewriteRule ^(.*)\.html $1.php [QSA,L,E=WasHTML:yes]



строку
RewriteRule ^index.html$ index.php [L,NE]
можно выкинуть, этот вариант тоже обрабатывает вторая строка (RewriteRule ^(.*).html $1.php [QSA,L])

Великолепно! Работает. Обратитесь плиз в личку.

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