2016-05-25 23 views
0

私のメインドメインは私のpublic_htmlフォルダに縛られていますが、私は.htaccessリダイレクトを使用して複数のサイトを簡単にホスティングできるように、ルートディレクトリをフォルダ内のサブディレクトリに変更します。例:次のように.htaccessルートディレクトリにサブディレクトリをリダイレクト

public_html 
-- .htaccess 
-- site1 
---- .htaccess 
-- site2 
-- site3 

ルートディレクトリにある.htaccessファイルがある:

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteCond %{REQUEST_URI} !^/subdirectory/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /subdirectory/$1 
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteRule ^(/)?$ subdirectory/ [L] 

これは正常に動作しますが、私はこれと私のSITE1ディレクトリにある.htaccessファイルに問題があると思います。 URLを入力すると、example.com/site1にリダイレクトされることがあります。したがって、ウェブサイトはexample.comとexample.com/site1で全く同じように見えますが、example.com/site1として表示させたくありません。 site1ディレクトリ内の2番目の.htaccessファイルは、以下のとおりです。

RewriteEngine on 

# Change default directory page 
DirectoryIndex /home/ 

# Remove .php extension 
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/(.+)/$ 
RewriteCond %{DOCUMENT_ROOT}/%1.php -f 
RewriteRule ^(.*)/$ $1.php [L] 

# Ensure all directory URLs have a trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301] 

# Same for HTTPS 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301] 

# Redirect default error page to home page 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(/|error/)?$ /home/ [R=301,L] 

# Error Documents 
ErrorDocument 400 /error/?e=400 
ErrorDocument 401 /error/?e=401 
ErrorDocument 403 /error/?e=403 
ErrorDocument 404 /error/?e=404 
ErrorDocument 500 /error/?e=500 

# Prevent viewing of htaccess file 
<Files .htaccess> 
    order allow,deny 
    deny from all 
</Files> 

私はそれが私はそれがURLに影響を与える使用していますが、それは解決することができる場合、私は任意の助けをいただければ幸いさまざまな書き換えルールの問題だかはわかりません。

ありがとうございます。私の説明があまり良くない場合はお詫び申し上げます。

答えて

1

は、それは私の作品

# Ensure all directory URLs have a trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [QSA,L,R=301] 

# Same for HTTPS 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\/$ 
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$ 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,L,R=301] 

を試してみてください。 %{REQUEST_URI}にはsite1が含まれているため、使用しないでください。 QSAは、?param1 = val1のようなURLパラメータを追加します。& param2 = val2これらを使用しない場合は、QSAを省略することができます。 また、テスト中にR = 301をR = 302(一時リダイレクト)に置き換えます。そうしないと、ブラウザはルールを記憶し、要求を再送信しません。

+0

返信いただきありがとうございます。変更を有効にして、example.com/homeというURLにアクセスして目的のスラッシュを省略した場合、後続のスラッシュをリダイレクトする代わりにリダイレクトが多すぎるためサイトが読み込まれません。私が含む.htaccessファイルを持つWebサイトの資産のSITE1フォルダ内のサブディレクトリを持って追加することが有益であったかもしれない: でRewriteBase/ #の許可しないディレクトリへのアクセス IndexIgnoreが* 'で 'オプション-Indexes RewriteEngineと資産フォルダに末尾のスラッシュを省略すると、ほとんどの問題が発生します。 – JakeGriffin

+1

申し訳ありませんが、最初のブロックにスラッシュが追加されました。 –

+0

メインディレクトリのページで動作するVasiliyに感謝します!しかし、上記の私はアクセスをブロックしている.htaccessファイルを持つアセットサブディレクトリがあります。 example.com/assets/に移動しても問題ありませんが、スラッシュを省略するとexample.com/site1/assets/にリダイレクトされます。どのように解決できますか? – JakeGriffin

関連する問題