重定向循环URL重写

时间:2015-11-03 17:21:51

标签: mod-rewrite url-rewriting url-redirection friendly-url

我将所有.php扩展名重定向到.html,但是我遇到了循环问题。

例如,来自:

-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

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

尝试:

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]

问题在于重写引擎循环并且您的两个规则会相互覆盖。通过添加一些条件,您可以防止这种情况。

答案 2 :(得分: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]