web-dev-qa-db-ja.com

VHostではなく.htaccessを使用してドキュメントルートをサブディレクトリに設定する方法

私のローカルマシンでは、以下が完璧に機能します。

 <VirtualHost *:80>
       ##ServerAdmin [email protected]
       DocumentRoot "C:/xampp/htdocs/website_1"
       ServerName testpage.com/website_1
       ##ServerAlias www.recruitement.localhost
       ##ErrorLog "logs/dummy-Host2.localhost-error.log"
       ##CustomLog "logs/dummy-Host2.localhost-access.log" combined
 </VirtualHost>

Howerver Imは私のウェブサイトをjusthost.comというホスティング会社にホストしていますが、それらは私が変更することを許可していませんhttpd-vhosts.confまたはhttpd.conf 。これで、サイト全体がコーディングされ、website_1の下のファイルがwebsite_1の下の他のファイルを参照するように、単純なスラッシュ「/」を使用して、website_1がドキュメントルートとして扱われるようになりました。これはローカルマシンで完全に機能しますが、ホストにアップロードすると、public_htmlでファイルを見つけようとしているため、ファイルが見つからないため、サーバーエラーが発生します。

例えば:

  public_html
      - website_1
         - script.php
         - style.css

私の内部script.php

<a href="/style.css">See My Style</a>

これはローカルマシンでは正常に機能しますが、ホストではpublic_html/website_1ではなくpublic_htmlの下でstyle.cssを見つけようとするため失敗します

VHostsを使用せずに複数のドキュメントルートを持つ方法はありますか? .htaccessなどを使用するようなものです。約1万行のコードなので、コードの書き直しは極力避けたいと思います。

6
GGio

httpd.confを介してmod_rewriteと.htaccessを有効にしてから、このコードを.htaccessディレクトリの下のDOCUMENT_ROOTに配置します。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{DOCUMENT_ROOT}/website_1/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/website_1/$1 -d [OR]
RewriteCond %{DOCUMENT_ROOT}/website_1/$1 -l
RewriteRule (?!^website_1/)^(.*)$ /website_1/$1 [R=302,L,NC]

正常に機能していることを確認したら、R=302R=301に置き換えます。 mod_rewriteルールのテスト中は、R=301(永続的なリダイレクト)の使用を避けてください。

11
anubhava

.htaccessにエントリを作成します。あなたがウェブサイトabc.comを持っているとしましょう。ディレクトリで別のWebサイトを実行したいとします。次に、abc.comを指す親ディレクトリに.htaccessを作成します

RewriteEngine on

RewriteCond %{HTTP_Host} ^abc.com$ [NC,OR]

RewriteCond %{HTTP_Host} ^www.abc.com$ 

RewriteCond %{REQUEST_URI} !subdirectory/

RewriteRule (.*) /subdirectory/$1 [L]
3
Aman Varshney

すべての画像リクエストをrootに書き換えることが解決策になる可能性があります。ルートディレクトリにある1つの.htaccessファイルでこれを試すことができます。

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

# Check if request is for an image at root. Add/remove file types if necessary.
RewriteCond %{REQUEST_URI}  ^/([^.]+)\.(png|jpg|gif|css) [NC]
RewriteCond %{REQUEST_URI}  !/website_1  [NC]
# Rewrite request to point to "website_1" directory
RewriteRule .*               /website_1/%1.%2          [L,NC]
2