我已经为子域编写了.htaccess,但它重定向了太多次。
我的完整代码看起来像
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ http://subdomain/$1 [R,L]
RewriteEngine On
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^404/?$ /404.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ http://subdomain/404 [L,R]
问题很可能是最顶层的重定向。它实现了一个重定向循环。此外,还不清楚它的实际目的是什么。。。什么是";子域";在这里主机名/子域名?像http://sub.example.com/$1
这样的东西?
假设所有";子域";如果由同一个http服务器提供服务,则需要添加一个附加条件来打破这种外观:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HOST_NAME} !^sub.example.com$
RewriteRule ^(.*)$ http://sub.example.com/$1 [R,L]
这也可以简化为:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HOST_NAME} !^sub.example.com$
RewriteRule ^ http://sub.example.com%{REQUEST_URI} [R,L]
还可以考虑使用加密的https协议,这实际上是目前的标准。
RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ http://subdomain/$1 [R,L]
您实际上并没有说明您要做什么。但是,像这样检查SERVER_PORT
端口80
的唯一原因是您是否重定向到HTTPS(端口443(。但是您正在重定向到HTTP(端口80(,所以这自然会导致重定向循环。
您需要在替换字符串中将http
更改为https
。例如:
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://subdomain/$1 [R=301,L]
(最终,这应该是一个301永久重定向,一旦你确认它按预期工作。(
或者,如果您不打算强制HTTPS(但应该强制(,请完全删除这些指令。
RewriteRule ^ http://subdomain/404 [L,R]
并在最后一条规则中更改为https
。(但是,您不应该重定向到"404">错误文档。(