2016-10-06 1 views
0

Я разрабатываю приложение с PHP 7.0 и реализую маршруты с MVC. Моя корневая папка ('/') является общедоступной. Когда я обращаюсь к адресу localhost, я перенаправляюсь на index.php, имея доступные маршруты. Но когда я пытаюсь другой URL, чтобы получить доступ к другому маршруту, как «локальный/контакт» сервер не находит запись и дать это сообщение:Apache2 не работает с маршрутами PHP

Not Found 

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

Я уверен, что проблема в на моем сервере конфигурации (apache2 на linux mint 18), потому что компьютер моего друга работает нормально. Я использую файл .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] применит RewriteConds для любого URL-адреса в моей файловой системе. –

ответ

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» on, наконец, работают.

Эта страница https://docs.bolt.cm/3.0/howto/making-sure-htaccess-works поможет мне решить эту проблему!