Apache2 无法使用路由 PHP

Apache2 not working with routes PHP

我正在使用 PHP 7.0 开发应用程序并使用 MVC 实现路由。我的根文件夹 ('/') 是 'public' 目录。当我访问地址 'localhost' 时,我被重定向到 index.php 并且有可用的路由。但是当我尝试另一个 url 访问另一个路由时,例如 'localhost/contact' 服务器找不到该条目并给出此消息:

Not Found

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

我很确定问题出在我的服务器配置上(linux mint 18 上的 apache2),因为我朋友的 PC 工作正常。我也在 public 目录中使用 .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

我还是新手,对服务器配置了解甚少。请有人能给我一盏灯吗?谢谢!

这个:

RewriteRule ^.*$ - [NC,L]

它匹配所有内容,并且由于它被标记为 [L],不会评估其他 RewriteRules,因此所有重写都在这里停止。这意味着 example.com/foo 的请求将匹配此规则,重写停止,并且将在文件系统中搜索文字 foo 文件 - 它不存在。

然后,即使这条规则不存在,下一行

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

也不行。 ANY url 会匹配它,但会删除相关数据,因此 example.com/foo 的请求与 example.com/index.php 的请求相同。不会传入任何查询参数。

你的逻辑应该更像是:

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

哪个会做这些类型的翻译:

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

经过详尽的测试,我找到了解决方案。 htaccess 文件和代码很好。问题是我的服务器没有读取 .htaccess。编辑 apache2.conf 并在 上设置 'AllowOverride All',终于成功了。

此页面 https://docs.bolt.cm/3.0/howto/making-sure-htaccess-works 帮我解决这个问题!