2009-12-27 90 views
2

有一个与我的.htaccess文件有问题。如果我输入“website.com”它正确地重定向我“WWW .website.com”,但如果我输入“website.com/level1/level2”它重定向我“www.website.com/index .php/level2“,并给我一个404错误。的.htaccess - 的RewriteCond问题

以下是我在我的.htacces文件:

Options +FollowSymLinks 
IndexIgnore */* 

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php 

AddDefaultCharset UTF-8 

#Redirect from website.com to www.website.com 
RewriteCond %{HTTP_HOST} ^website\.com$ [NC] 
RewriteRule ^(.*)$ http://www.website.com/$1 [L,R=301] 

任何建议如何解决这个问题?

谢谢。

回答

0

我觉得发生了什么事是,你重写index.php你正在做外部重定向之前。如果您切换RewriteRules的顺序,它应该解决问题。试试这个:

RewriteEngine on 

#Redirect from website.com to www.website.com 
RewriteCond %{HTTP_HOST} ^website\.com$ [NC] 
RewriteRule ^(.*)$ http://website.com/$1 [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule . index.php 

AddDefaultCharset UTF-8 

这样,外部重定向到www首先做的,当请求返回时,内部index.php然后应用,而不是周围的其他方法。

0

如果你有访问服务器的配置,这是更好地做主机重定向与普通的旧Redirect这是专为这个确切的情况。除非你真的需要,否则不要诉诸mod_rewrite的复杂性。

example.com<VirtualHost>你的主网站上删除了ServerAlias,并将其添加为一个单独的虚拟主机来代替:

<VirtualHost *:80> 
    ServerName example.com 
    Redirect permanent/http://www.example.com/ 
</VirtualHost> 
0

始终把造成这些规则之前的外部重定向,只是产生一个内部规则重定向。否则,已经在内部重写的URL将使用内部URL在外部重定向。

你的情况掉你的两个规则,把规则与 [R标志的其他规则之前的顺序

所以:

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

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php