2011-07-21 9 views
6

私のドメインのディレクトリ構造を整理しています(rootのディレクトリにルートURLのコンテンツを設定するために私に任せてください) RewriteRuleを正しく使用する方法について説明します。.htaccess:ルートURLをサブディレクトリにリダイレクトしますが、ルートURLは保持します

骨子

私はdomain.tldに/サブディレクトリ/を使用するが、それでも、URLでdomain.tldにとして表示するdomain.tldにをしたいです。

私の.htaccessは、これまで

Options +FollowSymlinks 
RewriteEngine On 

#Force removal of wwww subdomain 
RewriteBase/
RewriteCond %{HTTP_HOST} ^www.domain.tld 
RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L] 

#Trailing slash 
RewriteRule ^/*(.+/)?([^.]*[^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301] 

#Redirect root url to subdirectory 
RedirectMatch 301 ^/subdirectory/$ http://domain.tld/ 
RewriteRule ^/$ /subdirectory/?$ [L] 

に、RedirectMatchは素晴らしい作品。残念なことに、Tは最後のRewriteRuleと思われますは十分に機能するはずですが、そうではありません。ルートディレクトリの古いコンテンツの設定は引き続き表示されます。

私はここで何が欠けていますか?

アップデート:私は、理由を説明することができるように.htaccessファイル/ apacheのに十分な経験がないのです解決

簡単な修正。

私が持っていた:

1つのスラッシュ固定すべて削除
RewriteRule ^/$ /subdirectory/?$ [L] 

RewriteRule ^$ /subdirectory/?$ [L] 

をだから今、私の質問は次のとおりです。つまり、なぜ?

答えて

0

RewriteRuleのURIの一部には、先行するスラッシュが含まれていません。ですから、RewriteRule ^/$が理論的にhttp://example.com//と一致する場所(ダブルスラッシュに注意)RewriteRule ^$を使用する必要がhttp://example.com/一致する

追加:末尾の?$は意味がありません。これは、空のパラメータ$を持つクエリ文字列を追加するためです。

最後にあなたが持っている:RewriteRule ^$ /subdirectory/ [L,QSA]

0

どちらのルールがVALIDです:

サーバー設定または仮想ホストのコンテキストで使用するこの1 URLはスラッシュで始まる):

RewriteRule ^/$ /subdirectory/ [L] 

に同じルールを設定すると、htaccessの、(それが現在のフォルダからの相対であるため、)、あなたが先頭のスラッシュを削除する必要があります。

RewriteRule ^$ /subdirectory/ [L] 

P.S. Floernは既に約?$を対象としています。 $の必要は全くありません。 ?でURLを完成させた場合、これはApacheにクエリ文字列を新しいURLに転送しないように指示します(クエリ文字列を完全に削除します)。

さらに、[QSA]フラグは、クエリ文字列(ターゲットURLに?)を操作して、現在のクエリ文字列を新しく作成するURLに追加したい場合にのみ必要です。つまり、このルールではRewriteRule ^$ /subdirectory/ [L,QSA][QSA]フラグは何も実行せず、安全に削除できます。

1

このお試しください:私は解決策を試してみましたが、私の場合は/フォルダを削除/しかしWWWを古いサイト(www.site.it)を示すといない

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_URI} !^/subdirectory/ 

# REWRITES ALL URLS 
# [REPLACE "domain" WITH THE ACTUAL DOMAIN, 
# WITHOUT THE TLD (.com, .net, .biz, etc)] 
RewriteCond %{HTTP_HOST} ^(www\.)?domain\. 

# REWRITE ALL THOSE TO subdirectory 
RewriteRule ^(.*)$ /subdirectory/$1 [L] 

BR スピロス

関連する問題