You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP站点URL伪静态配置:获取无?url=的请求路径内容

解决PHP MVC站点的URL重写问题

嘿,我来帮你搞定这个URL美化的问题!你现在遇到的情况是典型的MVC模式下需要把带查询字符串的URL转成干净路径的需求,咱们直接看怎么改配置就行。

你的.htaccess已经写了开头的重写条件,但关键的RewriteRule没写完,这就是为什么直接访问/hello会报404的原因——Apache不知道要把这个请求转发到你的入口文件(一般是index.php)。

修改后的完整.htaccess配置

<IfModule mod_rewrite.c>
    Options -Multiviews
    RewriteEngine On
    RewriteBase /phpmvc.loc/public
    # 排除真实存在的目录
    RewriteCond %{REQUEST_FILENAME} !-d
    # 排除真实存在的文件
    RewriteCond %{REQUEST_FILENAME} !-f
    # 将所有请求转发到index.php,并把路径作为url参数传递
    RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
</IfModule>

关键规则解释

  • RewriteRule ^(.+)$ index.php?url=$1:把请求的路径(比如hello)捕获下来,作为url参数传递给index.php,这样你就能在PHP里通过$_GET['url']拿到hello了。
  • [QSA]:全称是Query String Append,意思是如果原URL带其他参数(比如/hello?id=123),会把这些参数也附加到新请求里,不会丢失。
  • [L]:全称是Last,告诉Apache这是最后一条重写规则,处理完就停止,避免后续规则干扰。

额外注意事项

  • 确保Apache的mod_rewrite模块已经开启:可以通过phpinfo()查看模块状态,或者在Apache配置文件(比如httpd.conf)里去掉#LoadModule rewrite_module modules/mod_rewrite.so前面的注释。
  • 站点目录的AllowOverride要设为All:在你的虚拟主机配置(比如httpd-vhosts.conf)里,对应phpmvc.loc的目录块要加上:
    <Directory "/path/to/your/phpmvc.loc/public">
        AllowOverride All
        Require all granted
    </Directory>
    
  • PHP入口文件的处理:在index.php里可以这样获取参数:
    // 若没有传递url参数,默认设为home
    $url = $_GET['url'] ?? 'home';
    // 接下来就可以根据$url的值处理路由逻辑了
    

这样修改后,访问http://phpmvc.loc/hello就会自动转发到http://phpmvc.loc/index.php?url=hello,你就能正常获取到hello这个内容啦!

内容的提问来源于stack exchange,提问作者Victor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:21:56