2016-10-06 2 views
0

PHP 7.0でアプリケーションを開発し、MVCでルートを実装しています。私のルートフォルダ( '/')は 'public'ディレクトリです。私が 'localhost'というアドレスにアクセスすると、私はindex.phpにリダイレクトされ、利用可能なルートがあります。Apache2がルートと連携していませんPHP

Not Found 

The requested URL /contact was not found on this server. 

私は私のサーバーの設定(上の問題というかなり確信している:しかし、私は「localhost /を接触」のようなサーバーは、エントリを検索し、このメッセージを与えるものではありません、別のルートにアクセスするには、別のURLをしようとすると、 apache2 on linux mint 18)、私の友人のPCは正常に動作しているからです。私は公共のディレクトリ内にあまりにも.htaccessファイルを使用しています:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

サーバーがindex.phpを実行しないように私には思えるし、パスにアクセスしようとします。 index.phpの実行を強制して、通知されたURLへのルートがあるかどうかを確認する方法はありますか?

ここに私のapache2設定ファイルが続きます。

http://pastebin.com/2mgSjWWV

http://pastebin.com/yD4RpfK8

私はまだnewbeeだと私は、サーバー構成にはほとんど理解しています。誰かが私に光を与えることができますか?ありがとう!

+0

'RewriteRule ^。* $ - [NC、L]'はどうすればいいですか? –

+0

私の先生はそれを私にくれた.htaccess。ウェブを見ると、RewriteRule ^。* $ - [NC、L]はファイルシステム内のどのURLにもRewriteCondを適用します。 –

答えて

3

この:

RewriteRule ^.*$ - [NC,L] 

それはすべてを一致し、それは[L]タグ付きだから、他のRewriteRulesので、すべてここにストップを書き換え、評価されません。つまり、example.com/fooの要求がこのルールと一致し、書き換えが停止し、リテラルfooファイルがファイルシステム内で検索されます。存在しません。

そして、この一つのルールがなかった場合でも、この次の行

RewriteRule ^.*$ index.php [NC,L] 

も動作しないでしょう。いずれのURLもそれに一致しますが、関連するデータを取り除くので、example.com/fooのリクエストはexample.com/index.phpのリクエストと同じになります。何のクエリパラメータが渡されないであろう

あなたのロジックをもっとする必要があります:。翻訳のこれらの種類を行うだろう

RewriteRule ^(.*)$ index.php?args=$1 [QSA,L] 

:テストの網羅バッテリー後

example.com/foo  -> example.com/index.php?args=foo 
example.com/bar?baz -> example.com/index.php?args=bar&baz 
+0

ありがとう、しかし、私は問題を発見した。私のapache2は.htaccessを正しく読み込んでいませんでした。私の古い.htacessは明らかに働いていた。あなたのお時間をありがとう、あなたは私をたくさん助けます! :) –

0

を、私が見つかりました。解決策。 htaccessファイルとコードは問題ありませんでした。問題は私のサーバーが.htaccessを読んでいないことでした。 apache2.confを編集し、「AllowOverride All」をオンに設定すると、最終的に動作します。

このページhttps://docs.bolt.cm/3.0/howto/making-sure-htaccess-works私はそれを解決するのに役立ちます!

関連する問題