我正在尝试重定向到包含index.php等的/ hc /目录。浏览器显示ERR_TOO_MANY_REDIRECTS错误。请告诉我这里我做错了什么。
当我在旧托管中使用域名时,这工作得很好。现在,当我使用IP时,它失败了。
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /hc/
# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>
RewriteCond %{HTTP_HOST} ^45.117.122.107$ [NC]
RewriteRule ^(.*)$ http://45.117.122.107/$1 [L,R=301]
# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php?/$0 [PT,L,QSA]
答案 0 :(得分:0)
此规则的问题
RewriteCond %{HTTP_HOST} ^45.117.122.107$ [NC]
RewriteRule ^(.*)$ http://45.117.122.107/$1 [L,R=301]
是它将^(.*)$
重定向到自己$1
。然后,客户端再次请求相同的URL,并重定向到自身,并再次请求相同的URL,依此类推......使用域名不会改变这一点。
要避免此重定向循环或任何其他循环,您需要一些条件,它会提前退出或跳过此规则。
要将所有内容重定向到/hc
,您可以使用此规则
RewriteRule !^hc/ /hc%{REQUEST_URI} [R,L]
如果请求尚未针对hc
,并且未重定向,则此规则首先检查。
然后将/hc/
的每个请求重写为index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php?/%{REQUEST_URI} [L]