mod_rewrite
がPHP 7.0.0にアップグレードした後、WAMPで正常に動作するのに問題があります。すべてRewriteRule
はApacheによって完全に無視されているようです。その結果、404
というエラーが発生します。.htaccessの書き換えルールを無視するWAMP
これはhttpd-vhosts.conf
で私の仮想ホストである:
<VirtualHost *:80>
ServerName myproject.local
DocumentRoot "D:/Projects/myproject/www"
ErrorLog "D:/Projects/myproject/www/apache_errors.log"
LogLevel info
<Directory "D:/Projects/myproject/www/">
LogLevel debug
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
これは、Apacheに認識され、私の.htaccess
は、DirectoryIndex
のようなディレクティブを処理しますが、任意のRewriteRule
の無視しているようだ:
RewriteEngine On
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z_\-\s]+)/?$ $1.php [L,QSA] #root pages
RewriteRule ^([a-zA-Z_\-\s]+)/([a-zA-Z_\-\s]+)/?$ core/modules/$1/$2.php [L,QSA] #pages with no id
RewriteRule ^([a-zA-Z_\-\s]+)/([a-zA-Z_\-\s]+)/([0-9]+)/?$ core/modules/$1/$2.php?$1_id=$3 [L,QSA] #pages with id (edit, etc)
を
Apacheのエラーログには何も表示されません。要求が失敗するだけです。
[Sun Dec 18 15:47:03.787934 2016] [core:info] [pid 12532:tid 1140] [client ::1:57506] AH00128: File does not exist: D:/Projects/StoryTracker-Core/www/test
私はこれらの結果を引き起こしていることに気づいていないいくつかの外部の力が必要です。
<VirtualHost *:80>
ServerName myproject.local
DocumentRoot "d:/projects/myproject/www"
ErrorLog "d:/projects/myproject/www/apache_errors.log"
LogLevel trace8
<Directory "d:/projects/myproject/www/">
Options +Indexes +FollowSymLinks +Includes
AllowOverride All
Require all granted
LogLevel trace8
</Directory>
</VirtualHost>
'MultiViews'を無効にするとどうなりますか?通常、書き換えと競合します。それらのルールに 'L'の代わりに' END'を使うか、 'DPI'を追加するべきです。 'mod_rewrite'のトレースを有効にします。 – Walf
@ Walfアクセスしてみるとこの孤独なメッセージが出る/連絡先/書き換えエンジンは要求を取り上げて書き換えません。 '[Mon Dec 19 22:36:52.661022 2016] [rewrite:trace1] [pid 8204:tid 1116] mod_rewrite.c(477):[クライアント:: 1:55336] :: 1 - - [myproject.local/sid D:/ Projects/myproject/www/contact' –
リクエストされたURIを持つ '' init rewrite engine 'を取得してから、 '' uri '/ contact /' 'にパターン '^([a-zA-Z _ \\ - \\ s] +)/?$'を適用していますが、なぜ「init rewrite engine」がトリガしないのかわかりません。 –