2013-03-03 4 views
0

Я бил головой о клавиатуру, не могу понять этого и не могу получить ответ на google.301 перенаправление категории/категории/index.php на категорию/category.html

У меня есть куча старых URL-адресов, я хочу перенаправить 301. Например, родитель/ребенок * /index.php * должен стать родитель * /child.html *

Это то, что я написал:

RewriteCond %{REQUEST_URI} /index.php$ 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)/index.php$ $1.html? [L,R=301] 

Там нет запроса, отправленного в индекс .php, поэтому я сделал второе условие пустым. Если я тестирую это на , это терпит неудачу, за исключением случаев, когда я заполняю значение request_URI вручную (см. Ссылку выше)

Буду признателен за любую помощь в этом. Если я не смогу его решить, мне придется вручную сделать Redirect 301 oldurl newurl, и это займет много времени!

+0

Мне нужно добавить, это для миграции joomla 2.5, так что /administrator/index.php должен по-прежнему функционировать должным образом – Kalemanzi

+0

Кажется, что нужно работать с помощью тестера правил перезаписи *, с которым вы связаны. Что не так? Рассмотрите возможность размещения остальных директив '.htaccess', может возникнуть проблема с порядком выполнения правил. – kjetilh

ответ

0

Вы можете попробовать это в одном файле .htaccess в корневом каталоге:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/index\.php/? [NC] 
RewriteRule .*    /%1/%2.html    [R=301,L] 

Карты молча

http://example.com/parent/child/index.php

К

http://example.com/parent/child.html

Струны parent и child считаются переменными, а index.php предполагается фиксированным.

Для автоматического отображения, замените [R = 301, L] с [L]

Это работает в реальном сервере. Тем не менее, вы можете проверить его here без условий %{REQUEST_FILENAME}, не поддерживаемых на этом тестовом сайте.