web-dev-qa-db-ja.com

Localhost.htaccessがUbuntuで機能しない

_.htaccess_ファイルをローカルホストで機能させようとしています。ファイルがサーバー上にあり、機能するため、ファイルが機能することはわかっています。ただし、ローカルでは機能していないようです。

オーバーライドをすべてに設定するために見つけたチュートリアルに従いました。以下は私の_/etc/Apache2/sites-available/default_ファイルの開始です。

_<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
_

これは私のニブルサイトの同じディレクトリにあるコードです:

_<VirtualHost *:80>
    ServerName nibble.local
    DocumentRoot /var/www/nibble_framework/web/
    <Directory /var/www/nibble_framework/web/>
        AllowOverride All
        Options Indexes FollowSymLinks MultiViews
        Allow from All
    </Directory>
    RewriteLog /var/www/rewrite.log
    ErrorLog /var/log/Apache2/error.log
</VirtualHost>
_

A2ensiteを使用してこのサイトを有効にし、Apacheを再起動しました。また、hostsファイルにサイトを追加しました。

_  127.0.0.1  nibble.local
_

A2enmodを使用してmodの書き換えを有効にし、Apacheを複数回再起動/再ロードしました。

_  $ a2enmod rewrite 
  Module rewrite already enabled
_

私の_.htaccess_ファイルは_/var/www/nibble_framework/web/.htaccess_にあり、次のコードがあります。

_  Options +FollowSymLinks +ExecCGI

  <IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^([^/]*)/?.*$ - [E=FILE:%{DOCUMENT_ROOT}/$1.php]

  RewriteCond %{ENV:FILE} !^$
  RewriteCond %{ENV:FILE} -f
  RewriteRule ^([^/]*)/?(.*)$ $1.php?url=$2 [QSA,L]

  RewriteCond %{ENV:FILE} !^$
  RewriteCond %{ENV:FILE} !-f
  RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
  </IfModule>
_

print_r($_REQUEST)を実行すると、URLに長い文字列が入力されている場合でも、常に空の配列になります。

なぜこれが失敗するのか誰かが知っていますか?

編集:

Apache2アクセスログ:

_~$ tail -f /var/log/Apache2/access.log
::1 - - [16/Aug/2011:07:32:39 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:39 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:39 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
::1 - - [16/Aug/2011:07:32:40 +0100] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Ubuntu) (internal dummy connection)"
_
5
Luke

VirtualHostが正しく処理されていないため、getリクエストにAllowOverrideが設定されていない可能性があります。まず、/etc/hostsファイルは次のようになります。

127.0.0.1   localhost   localhost.localdomain
127.0.1.1   nibble.local

次に、名前ベースのvhost用にそのインターフェイスを設定する必要があります。現在設定されているかどうかを指定しませんでした。通常、メインのApache構成で設定されますが、ubuntu/debianのファイルは/etc/Apache2/Apache2.confにあると思います。この行がそのファイルのどこかに設定されていることを確認してください。

NameVirtualHost *:80

これらの変更を行ったら、Apacheを再起動します

Sudo /etc/init.d/Apache2 restart

いいえ、テストしてください。ホストエントリのみをローカルに設定することを忘れないでください。したがって、これはローカルホストから要求された場合にのみ正しく機能します。行き詰まったり、うまくいかない場合は、/var/log/Apache2/error.logから関連する行を投稿してください

3
J. M. Becker

.htaccessファイルを使用するにはAccessFileNameディレクティブを指定します。

AccessFileName .htaccess

書き換えエンジンを有効にしてから、サービスを再起動します。

Sudo a2enmod rewrite 
1
Nikhil Mulley