
.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を再起動しました。また、私のホストファイルにウェブサイトを追加しました。
127.0.0.1 nibble.local
a2enmodを使用してモードの書き換えを有効にし、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)"
答え1
VirtualHostが正しく処理されていないため、要求の取得にAllowOverrideが設定されていないようです。まず、/etc/hosts
ファイルは次のようになります。
127.0.0.1 localhost localhost.localdomain
127.0.1.1 nibble.local
次に、名前ベースの仮想ホストへのインターフェイスを設定する必要があります。現在設定されているかどうかを指定していません。通常はデフォルトのApache設定で設定されており、ubuntu / debianがすでにそのファイルを見つけたようです/etc/apache2/apache2.conf
。その行がファイルのどこかに設定されていることを確認してください。
NameVirtualHost *:80
変更が完了したら、Apacheを再起動してください。
sudo /etc/init.d/apache2 restart
いいえ、テストしてみてください。ホストエントリをローカルでのみ設定することを忘れないでください。したがって、これはlocalhostから要求された場合にのみ正しく機能します。詰まったり動作しない場合は、該当する行を投稿してください。/var/log/apache2/error.log
答え2
.htaccess
ファイルを使用するには、AccessFileNameディレクティブを指定します。
AccessFileName .htaccess
書き換えエンジンを有効にしてサービスを再起動します。
sudo a2enmod rewrite