2

对,我有一个如下所示的 .htaccess 文件:

RewriteEngine On
RewriteRule ^foto/([\w-]+).jpg fotos.php?pic1=$1 [L,NS]
RewriteRule ^afbeeldingen/([\w-]+).jpg fotos.php?pic=$1 [L,NS]
RewriteRule ^header/([\w-]+).jpg header.php?head_jpg=$1 [L,NS] 
RewriteRule ^header/([\w-]+).png header.php?head_png=$1 [L,NS] 
RewriteRule ^def/([\w-]+).jpg def_header.php?head_def=$1 [L,NS] 

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php 
RewriteRule . index.php

RewriteCond %{HTTP_HOST} !^www.domain.com$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301]

这个问题只涉及最后两行,即我想强制“www”。在所有网址前面。这是我在尝试访问 sitemap.xml 时想要的结果:

http://domain.com/sitemap.xml -> http://www.domain.com/sitemap.xml

这是我得到的结果:

http://domain.com/sitemap.xml -> http://www.domain.com/index.php

所有其他网址似乎都工作正常(感谢 anubhava)。“万维网”。在http://domain.com/category/article -> http://www.domain.com/category/article等 URL 上正确强制

在阅读了以下堆栈问题(.htaccess force "www." on all but subdomains and remove trailing slashes)后,我尝试了以下方法:

RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

没有任何成功。我还尝试更改放置规则的顺序(即重写条件和下面的规则RewriteEngine On),这似乎没有什么区别。我正在使用 Yii 框架。

有人知道我在这里做错了什么吗?提前致谢!

更新

我忘了提到我实际上在根目录中没有 sitemap.xml 文件,而是使用 Yii 的 urlManager 重新路由到控制器操作以生成 sitemap.xml,如下所示:

'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName'=>false,
    // 'matchValue' => true,
    'rules'=>array( 
        ...
        'sitemap.xml'=>'site/sitemapxml',
        ...
    ),
),

urlManager 自己生成一个 .htaccess 文件,这很可能与我自己的 .htaccess 文件有关。有任何想法吗?

4

2 回答 2

4

.htaccess 中的规则顺序很重要。

移动这条规则:

RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteEngine On在线下。

于 2013-10-03T10:29:06.623 回答
1

这个怎么样:

RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
于 2013-10-03T10:30:47.613 回答