重定向循环 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]
我正在将我所有的 .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]