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>
これらはlocalhost
のDocumentRoot
で使用されているのと同じ設定なので、なぜ役に立たないのかわかりません。
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
解決策: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と同じです。
必要なのは、エイリアスターゲットのディレクトリコンテナです
<Directory "/usr/docs/uni/tmosct/public">
...
</Directory>
[〜#〜] update [〜#〜]
仮想ホストで機能するには、VirtualHostコンテナー内にDirectoryコンテナーを配置する必要があります。
更新2
JsFiddleのことをすばやく確認します。
NameVirtualHost *:80
コンテナの上に、次に書き直す必要があります
<VirtualHost 127.0.0.1>
に
<VirtualHost *:80>
最後に、URLを解決できるように、hostsファイルにエントリが必要です。