2015-11-03 2 views
0

Я перенаправляю все мои расширения .php в .html, но у меня возникает проблема цикла.Переписывание URL-адреса перенаправления

Например, из:

-mywebsite.com/country/france-php/paris.php 

в

-mywebsite.com/country/france-php/paris.html 

Вот мой .htaccess:

RewriteEngine On 
RewriteBase/ 
RewriteRule (.+)\.php$ $1.html [R=301,L] 
RewriteRule (.+)\.html$ $1.php [L] 
FallbackResource /index.php 

При анализе с перенаправлением детективом Я получаю много перенаправлений на:

-mywebsite.com/country/france-php/paris.html 

ответ

0

ли первое переназначение на основе сырого полученного запроса:

RewriteCond %{THE_REQUEST} ^GET\ /(.+)\.php 
RewriteRule^/%1.html [R=301,L] 

RewriteRule ^(.+)\.html$ /$1.php [L] 

Чтобы загрузить index.php как index.html тоже, вы можете добавить следующие переписывают на вершине:

RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_URI} ^(.*)/$ 
RewriteRule^%1/index.php [R=301,L] 
+0

работает отлично: -mywebsite.com/country/france-php/paris.php и -mywebsite.com/country/france-fcret/, но не для -mywebsite.com/country/france-php/ –

+0

@IssamHmz Что должно произойти для 'mywebsite.com/country/france-php /'? – hjpotter92

+0

внутри france-php файл index.php, поэтому он должен открыть его, но с вашим решением он не открывает его только файлы, когда france-xrf france -fff открыты. –

0

Try:

RewriteEngine On 
RewriteBase/

RewriteCond %{THE_REQUEST} \ /+([^\?\ ]+)\.php([^\?\ ]*) 
RewriteRule^%1.html%2 [L,R=301] 

RewriteCond %{DOUMENT_ROOT}/$1.php -f 
RewriteRUle ^(.+)\.html(?:(/.*)|)$ $1.php$2 [L] 

Проблема заключается в том, что петли переписывающих механизмов и ваши два правила переписывают друг друга. Добавляя некоторые условия, вы можете это предотвратить.

+0

отлично подходит для: -mywebsite.com/country/france-php/paris.php и -mywebsite.com/country/france-fcret/, но не для -mywebsite.com/country/france-php/ –

+0

@IssamHmz см. Edit –

+0

Большое спасибо за работу –

0

Вы можете попробовать свои правила таким образом.

RewriteEngine On 
RewriteBase/ 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\ /(.+)\.php 
RewriteRule^%1.html? [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.+)\.html$ $1.php [L] 
+0

отлично подходит для: -mywebsite.com/country/france-php/paris.php и -mywebsite.com/country/france-fcret/, но не для -mywebsite.com/country/france-php/ –

Смежные вопросы