301通过.htaccess文件重定向无效

301通过.htaccess文件重定向无效,.htaccess,codeigniter,redirect,.htaccess,Codeigniter,Redirect,我用的是CodeIgniter。 在httacess文件中,我编写了以下代码以从url中删除index.php: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L,QSA] 现在我想用以下代码将站点根重定向到子域: rewritecond %{http_host} ^domain.com [nc]

我用的是CodeIgniter。 在httacess文件中,我编写了以下代码以从url中删除index.php:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
现在我想用以下代码将站点根重定向到子域:

rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ sub.domain.com/$1 [r=301,nc]
domain.com已成功重定向到sub.domain.com。但是domain.com/dir到sub.domain.com/dir不起作用,仍然打开domain.com/dir。
当我删除第一个代码时,重定向工作得很好,但我也需要删除index.php。

$
添加到
rewritecond%{http\u host}^domain.com[nc]
的末尾应该可以为您修复它

rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ sub.domain.com/$1 [r=301,nc]
将成为

rewritecond %{http_host} ^domain.com$ [nc]
rewriterule ^(.*)$ sub.domain.com/$1 [r=301,nc]

你的规则是这样的:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://sub.domain.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

谢谢,但是我以前试过这个改变,我又试了一次,但是没有区别,仍然不起作用。domain.com/dir仍然没有重定向。如果从htaccess文件中删除其他条件和规则,重定向会起作用吗?是的,当我删除
RewriteRule^(.*)$index.php?/$1[L,QSA]
重定向起作用时。但是这段代码也是必要的。如果所有内容都被重定向到子域,你不能在子域中创建一个htaccess文件,并使用其他条件和规则吗?实际上它是一个CNAME。我用Cloudflare创建了它。子域没有文件夹。
dir
是真正的目录吗?它也有.htaccess吗?不,实际上是CNAME。
/dir/
怎么可能是CNAME?您的
sub.domain.com
可以是CNAME,但我的问题是关于
/dir/
?@anubhava对不起,我的意思是
sub.domain.com
是CNAME。”\dir`是一个虚拟目录。我有许多由CodeIgniter创建的路径。例如
sub.domain.com/contact
,在
public\u html
中没有名为
contact
的目录。