.htaccess - RewriteCond问题

时间:2009-12-27 00:08:54

标签: .htaccess mod-rewrite

我的.htaccess文件存在问题。如果我输入“website.com”,它会将我正确地重定向到“ www .website.com”,但如果我输入“website.com/level1/level2”,它会将我重定向到“www。 website.com/index.php/level2“并给我一个404错误。

以下是我的.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]

有任何建议如何解决问题?

谢谢。

3 个答案:

答案 0 :(得分: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然后应用,而不是相反

答案 1 :(得分:0)

如果您有权访问服务器配置,最好使用专为此情况设计的普通旧Redirect进行主机名重定向。在你真的需要之前,不要求助于mod_rewrite的复杂性。

删除主网站ServerAliasexample.com的{​​{1}},然后将其添加为单独的虚拟主机:

<VirtualHost>

答案 2 :(得分: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