这是我的完整案例:/var/www/html/ 目录中的 mvcframework 目录。mvcframework 包含一个公共目录,其中 index.php 作为前端加载器。我正在使用以下代码在公共目录中创建一个 .htaccess 文件:<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)$ index.php?$1 [QSA,L]</IfModule>我通过设置为指向公共文件夹的虚拟主机 url mvcframe.local 访问它:<VirtualHost 127.0.0.3:80> ServerName mvcframe.local DocumentRoot /var/www/html/mvcframework/public <Directory /var/www/html/mvcframework> Options -Indexes +FollowSymLinks AllowOverride All </Directory> ErrorLog /var/www/html/mvcframework/mvc-error.log CustomLog /var/www/html/mvcframework/mvc-access.log combined</VirtualHost>当我访问http://mvcframe.local或http://mvcframe.local/时,它会在公用文件夹 index.php 中输出 index.php 内容。当我访问http://mvcframe.local/?posts/hello它输出:Requested URL = posts/hello但是当我访问http://mvcframe.local/posts/hello删除?时,它给出:Not FoundThe requested URL was not found on this server.Apache/2.4.41 (Ubuntu) Server at mvcframe.local Port 80我试图找出搜索 2 小时的解决方案,但仍然没有找到解决方案。
1 回答
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
好吧,所以在搞砸并阅读了几个小时的 .htaccess 教程之后,我终于设法理解了我的错误。首先,这是帮助我理解错误的视频。
这是我的解决方案:
<IfModule mod_rewrite.c>
Options -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?$1 [QSA,L]
</IfModule>
首先,我正在检查是否启用了 mod_rewrite。然后提供一些选项。然后打开 RewriteEngine 这是启用重写规则所必需的。然后为提供的任何查询提供 [If no directory] 和 [If not file] 的重写条件,为此我重写规则基本上告诉它检查所有不以扩展名“。”结尾的字符串,只需将它们全部指向 index.php?$1。
基本上任何有 mvcframe.local/something_here/some_here/... 的东西都会自动变成 mvcframe.local/index.php?something_here/some_here
对于我的设置,index.php 是前端加载程序,因此所有内容都必须通过该文件。
- 1 回答
- 0 关注
- 173 浏览
添加回答
举报
0/150
提交
取消