_.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)"
_
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
から関連する行を投稿してください
.htaccess
ファイルを使用するにはAccessFileNameディレクティブを指定します。
AccessFileName .htaccess
書き換えエンジンを有効にしてから、サービスを再起動します。
Sudo a2enmod rewrite