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]

質問は最後の 2 行のみに関するものです。つまり、I want to force 'www.' です。すべての URL の前に。これは、sitemap.xml にアクセスしようとしたときの結果です。

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

これは私が得ている結果です:

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

他のすべての URL は正常に機能しているようです (anubhava に感謝)。「www.」http://domain.com/category/article -> http://www.domain.com/category/articleなどの URL で適切に強制されます

次のスタックの質問 ( .htaccess は、サブドメイン以外のすべてに「www.」を強制し、末尾のスラッシュを削除します) を読んだ後、次のことを試しました。

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