2016-04-24 9 views
2

私はhtaccess文書を通してサブドメインを前方にしようとしています。以下の指示はhttp://sub.domain.comを内部構造Root > subfolder > index.phpに転送します。これはすべてうまくいく。htaccessでサブドメインを作成するには?

# REWRITE DEFAULTS 
# ==================================================================================================== 
RewriteEngine On 
RewriteBase/

# SUBDOMAIN FORWARD 
# ==================================================================================================== 
RewriteCond %{HTTP_HOST} ^sub.domain.com$ 
RewriteRule ^(/)?$ subfolder/index.php [L] 

RewriteCond %{HTTP_HOST} ^sub.domain.com$ 
RewriteCond %{REQUEST_URI} !^/subfolder/ 
RewriteRule ^(.*)$ /subfolder/$1 

この方法では1つの(大きな)停止があります。 Root > subfolder > imagesなどのサブフォルダ内のフォルダにアクセスしようとすると、スラッシュで終了しないと、http://sub.domain.com/imagesのアドレスバーにあるURLはhttp://sub.domain.com/subfolder/images/になるはずです私が望むもの

スラッシュを忘れた場合にスラッシュを追加するとどうなりますか?

RewriteCond %{HTTP_HOST} ^(.*).domain.com$ 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteCond %{REQUEST_FILENAME} !(.*)/$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ http://%1.domain.com/$1/ [L,R=301] 

このことは、それがディレクトリで、スラッシュを追加し、それがファイルの場合、それはスラッシュを省略します検出されますので、あなたは、通常のURL(http://www.domain.com/images)を持っているときに、すべてが動作します。ただし、これは私たちのhttp://sub.domain.com/imagesの例では機能しません。

htaccessを使用してサブドメインを正しく動作させる方法を知っている人はいますか? /subfolder/imagesは、実際のディレクトリとmod_dirモジュールであるため、何が起こっている

答えて

1

は、301リダイレクトを行うことによって、すべてのディレクトリの末尾にスラッシュを追加します。

あなたはこのようにそれを使用することができます:

RewriteEngine On 

# add a trailing slash if /subfolder/images is a directory 
RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC] 
RewriteCond %{DOCUMENT_ROOT}/subfolder/$1/ -d 
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,NE,R=302] 

RewriteCond %{HTTP_HOST} ^sub\.domain\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/subfolder/ 
RewriteRule ^(.*)$ /subfolder/$1 [L] 
関連する問題