我将所有.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
答案 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]