启用 URL 路由

要启用 URL 路由,要求服务器必须支持 URL 重写或 PATHINFO 路径变量。前者在 apache、lighttpd、nginx、IIS 等 Web 服务器环境中都可以支持,后者则支持更多的服务器环境。

配置服务器环境

在本教程中,我们假定读者使用 APM Express,所以我们现在的修改都针对 APM Express。

找到 APM Express 的安装目录,打开 etc/httpd.conf.template 文件(注意,不是 httpd.conf),找到下列代码:

<VirtualHost *>
    DocumentRoot "d:/www"
    ServerName 127.0.0.1
 
    <Directory "d:/www">
        Options Indexes FollowSymLinks
        IndexOptions FancyIndexing FoldersFirst NameWidth=* VersionSort XHTML
 
        AllowOverride All
 
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

改为:

<VirtualHost *>
    DocumentRoot "d:/www/todo/public"
    ServerName 127.0.0.1
 
    <Directory "d:/www/toto/public">
        Options Indexes FollowSymLinks
        IndexOptions FancyIndexing FoldersFirst NameWidth=* VersionSort XHTML
 
        AllowOverride All
 
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

这里的修改假定 todo 应用位于 d:/www/todo 目录中,请根据实际情况修改

再查找:

#LoadModule rewrite_module modules/mod_rewrite.so

改为:

LoadModule rewrite_module modules/mod_rewrite.so

最后一步,将 d:/www/todo 目录中的 _htaccess 改名或复制为 .htaccess。这个操作必须在命令行窗口中进行:

在命令行窗口中创建 .htaccess

QeePHP 虽然也需要 .htaccess,但改变 URL 样式却不需要修改这个文件。而且 QeePHP 附带的 .htaccess 也只有区区数行代码:

RewriteEngine on
 
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1

修改应用程序设置

修改 configs/environments.yaml 文件,找到:

# url 参数的传递模式,可以是标准、PATHINFO、URL 重写等模式,
# 分别对应 standard、pathinfo、rewrite 设置值
dispatcher_url_mode: standard

改为:

dispatcher_url_mode: rewrite

现在重新启动 APM Express,再通过浏览器访问 http://localhost/ 应该看到 todo 应用的页面。如果出错,请仔细核对上述步骤。

重启 APM Express 后访问 todo 应用

仔细观察上图中地址栏的中地址,就会发现 URL 已经变成了 http://localhost/users/login。而这种改变没有修改一行代码!

试用一下 todo 的各项功能,会发现这些功能完全正常,而 URL 地址已经变短变美观了。