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

Apache mod_rewrite在.htaccess生效,如何在配置文件实现URL转$_REQUEST元素?

Apache虚拟主机配置迁移URL重写规则,实现多级路径转$_REQUEST参数

原.htaccess规则

原来在.htaccess中使用以下规则,将非文件、非目录的请求转发到index.php,让PHP可以解析多级路径(如example.com/s1/s2/s3)并填充到$_REQUEST数组:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [NC,L,QSA]

当前Apache虚拟主机配置

迁移到Apache虚拟主机配置文件中的规则如下:

<IfModule mod_ssl.c>
<VirtualHost *:443>
        DocumentRoot "/home/...path.../public"
        ServerName example.com
        Alias /lib /home/...path.../otherlib/
        <Directory />
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>
        RewriteEngine on
        RewriteCond %{REQUEST_URI} !^/lib/ [NC]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.php [NC,L,QSA]
</VirtualHost>
</IfModule>

配置修正与验证要点

  1. 缩小目录配置范围:当前<Directory />配置过于宽泛,建议限定到网站根目录以降低安全风险:
    <Directory "/home/...path.../public">
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
    </Directory>
    
  2. 确保PHP获取路径信息:如果PHP代码依赖PATH_INFO解析路径段,需在虚拟主机配置中添加参数开启传递:
    <FilesMatch "\.php$">
            SetHandler application/x-httpd-php
            AcceptPathInfo On
    </FilesMatch>
    
  3. 规则一致性验证:虚拟主机级别的重写规则与.htaccess行为一致,^(.*)$匹配所有非/lib/、非文件非目录的请求,QSA参数会保留原查询字符串,确保$_REQUEST同时获取路径参数和查询参数。

修改配置后重启Apache服务,访问example.com/s1/s2/s3,PHP即可通过$_SERVER['REQUEST_URI']或$_SERVER['PATH_INFO']提取路径段并填充到$_REQUEST数组,实现原.htaccess的功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:10:22