web-dev-qa-db-ja.com

エイリアスを持つApache仮想ホスト

Apacheのローカルコピーで仮想ホストを実行しています。エイリアスがあります。

<VirtualHost 127.0.0.1>
        ServerName oliverash.me.dev
        DocumentRoot "/usr/docs/oliverash.me/public"
        Alias /mayor "/usr/docs/uni/tmosct/public"
</VirtualHost>

これは正常に機能します。ブラウザでoliverash.me.dev/mayorに移動すると、エイリアスにアクセスできます。ただし、私はそのエイリアスのフォルダーに単純な.htaccess rewriteを入れています。これにより、すべての(フォルダーを除く)がindex.phpページに書き換えられます。この書き換えは正常に機能しています。

リライトは機能していますが、リライトは404 NotFoundエラーで返されます。たとえば、oliverash.me.dev/mayor/abcdefgにアクセスすると、index.phpファイルに書き換えられますが、次のエラーが発生します。

「リクエストされたURL /usr/docs/uni/tmosct/public/index.phpがこのサーバー上で見つかりませんでした。」

このファイルは実際に存在します。直接アクセスできます。

同じエイリアスを使用しますが、この仮想ホストの代わりにlocalhostを使用すると、書き換えは正常に機能し、index.phpは404ではなく実際のファイルを返します。これにより、私の仮想ホストの権限で行います。だから私はこれを私のhttpd-vhosts.confの下に追加しようとしました(運がない):

<Directory "/usr/docs/oliverash.me/public">
        AllowOverride All
        Order allow,deny
        Allow from all
</Directory>

これらはlocalhostDocumentRootで使用されているのと同じ設定なので、なぜ役に立たないのかわかりません。

UPDATE:

そこで、Apacheのerror_logを確認しました。このエイリアスの書き換えは、実際にはこの仮想ホストのドキュメントルートに関連していることがわかります。

[Fri Jan 06 22:30:57 2012] [error] [client 127.0.0.1] File does not exist: /usr/docs/oliverash.me.dev/usr

この書き直しは、実際には/usr/docs/oliverash.me.dev/public/usr/docs/uni/tmosct/publicでindex.phpを探しています。うまくいけば、それが/usr/docs/oliverash.me.devを調べているべきであることは明らかです。

更新2:

さて、これは私がApacheのローカルコピーを経験している問題です。ただし、ライブWebサーバーのエイリアスでまったく同じ問題が発生しました。これはいかなる種類の仮想ホストも使用していません。

[Sat Jan 07 02:41:51 2012] [error] [client 86.11.223.135] File does not exist: /var/www/html/var

この場合も、パスはDocumentRootを基準にしています。絶対パスである必要があります。

ちょっと迷惑:(

更新3:

これはまさに私が抱えている問題ですが、おそらくもっとうまく表現されています: http://forums.devshed.com/Apache-development-15/rewritebase-alias-and-rewriterule-are-not-rooting-to -必須-ファイル-395917.html

2

解決策:RewriteBaseは、ファイルシステム内の物理パス/ディレクトリではなく、エイリアス定義と同じである必要があります。

Mod_rewriteのRewriteBaseディレクティブを確認してください。これに関連している可能性があります。それについて読む: http://httpd.Apache.org/docs/current/mod/mod_rewrite.html#rewritebase

編集1
これを試すために、VMwareでクリーンなフレッシュUbuntu、クリーンなApache2インストールをセットアップし、通常のパスから新しいフォルダーを作成してから、.htaccessをセットアップし、適切なRewriteBaseルール。デフォルトのDocumentRootは/ var/wwwです。ここに、自分がどこにいるかを示すためにindex.phpを配置します。 「私はデフォルトでindex.phpです!」とエコーします。次に、Apache構成でこのエイリアスを作成しました。

Alias /testberg /home/www/testberg
<Directory "/home/www/testberg">
    Options +Indexes
    AllowOverride All
</Directory>

そしてそこに、「私はテストバーグのindex.phpです!」という別のindex.phpを入れました。/home/www/testbergの下に、次の内容の.htaccessを作成しました。

RewriteEngine On
RewriteBase /testberg
RewriteRule ^apa.test$ index.php

http://192.168.100.183/testberg/apa.test を参照すると、「私はtestbergのindex.phpです!」と表示されます。 Apachesログファイルなどにエラーはありません.

これはあなたが達成したかったことではありませんか?

編集2
別の仮想ホストで試してみます。 Windowsデスクトップで、ahntest.netにc:\windows\system32\drivers\etc\hostsのVMwareIPを指定しました。私のVMwareサーバーで/home/www/ahntest.netを作成し、そこに変更したindex.phpを配置して、「ahntest.netのindex.phpです!」とエコーしました。次の仮想ホストを作成しました:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName ahntest.net
    DocumentRoot /home/www/ahntest.net

    Alias /testberg /home/www/testberg
    <Directory "/home/www/testberg">
        Options +Indexes
        AllowOverride All
    </Directory>
</VirtualHost>

http://ahntest.net を参照すると、「私はahntest.netのindex.phpです!」と表示され、 http://ahntest.net/testberg を参照すると表示されます。私「私はtestbergのindex.phpです!」最後に http://ahntest.net/testberg/apa.test を参照すると、「私はtestbergのindex.phpです!」と表示されます。だから私が言えることから、ここでもうまくいきます。編集2の.htaccess/patchは、上記の編集1と同じです。

6
Mattias Ahnberg

必要なのは、エイリアスターゲットのディレクトリコンテナです

<Directory "/usr/docs/uni/tmosct/public">
  ...
</Directory>

[〜#〜] update [〜#〜]

仮想ホストで機能するには、VirtualHostコンテナー内にDirectoryコンテナーを配置する必要があります。

更新2

JsFiddleのことをすばやく確認します。

NameVirtualHost *:80

コンテナの上に、次に書き直す必要があります

<VirtualHost 127.0.0.1>

<VirtualHost *:80>

最後に、URLを解決できるように、hostsファイルにエントリが必要です。

1
Chris