对于我的特定场景,我应该怎么做才能使用 .htaccess 制作漂亮的 URL?

这是我的完整案例:

  1. /var/www/html/ 目录中的 mvcframework 目录。

  2. mvcframework 包含一个公共目录,其中 index.php 作为前端加载器。

  3. 我正在使用以下代码在公共目录中创建一个 .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 Found

The requested URL was not found on this server.


Apache/2.4.41 (Ubuntu) Server at mvcframe.local Port 80

我试图找出搜索 2 小时的解决方案,但仍然没有找到解决方案。


ABOUTYOU
浏览 174回答 1
1回答

海绵宝宝撒

好吧,所以在搞砸并阅读了几个小时的 .htaccess 教程之后,我终于设法理解了我的错误。首先,这是帮助我理解错误的视频。这是我的解决方案:<IfModule mod_rewrite.c>&nbsp; Options -Multiviews&nbsp; RewriteEngine On&nbsp; RewriteCond %{REQUEST_FILENAME} !-d&nbsp; RewriteCond %{REQUEST_FILENAME} !-f&nbsp; RewriteRule&nbsp; ^(.+)$ 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 是前端加载程序,因此所有内容都必须通过该文件。
打开App,查看更多内容
随时随地看视频慕课网APP