重定向循环 URL 重写

Redirection loop URL rewriting

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

例如,来自:

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

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

这是我的 .htaccess:

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

使用重定向侦探进行分析时,我收到许多重定向到:

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

根据收到的原始请求执行第一次重定向:

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

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

要将 index.php 也加载为 index.html,您可以在顶部添加以下重写:

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

尝试:

RewriteEngine On
RewriteBase /

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

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

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

您可以这样尝试您的规则。

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

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