Apache环境下PHP Web应用URL简化:移除public及页面路径
解决方案:Apache下PHP项目URL简化配置
前提条件
首先确保Apache已启用mod_rewrite模块,并且目标目录的AllowOverride设置为All:
- 打开Apache的
httpd.conf配置文件,取消LoadModule rewrite_module modules/mod_rewrite.so前的注释(去掉#)。 - 找到对应本地站点根目录的
<Directory>块(例如C:/xampp/htdocs或你的项目所在路径),将AllowOverride None改为AllowOverride All。 - 重启Apache服务。
问题1:去掉URL中的public目录
在CALCULATOR项目根目录(即http://localhost/CALCULATOR对应的物理目录)创建.htaccess文件,添加以下规则:
RewriteEngine On # 仅当请求的文件/目录不存在时,转发到public目录 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ public/$1 [L]
这样访问http://localhost/CALCULATOR会自动映射到public目录下的内容,无需修改原目录结构。
问题2:简化页面URL(如/about-us替代/src/pages/about-us.php)
在CALCULATOR/public目录下创建或修改.htaccess文件,添加以下规则:
RewriteEngine On # 将短路径映射到src/pages下的PHP文件 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([a-z0-9-]+)$ ../src/pages/$1.php [L]
规则说明:正则^([a-z0-9-]+)$匹配仅包含小写字母、数字和连字符的路径(如about-us、contact-us),自动映射到../src/pages/目录下对应的.php文件。
测试与注意事项
- 修改
.htaccess后,清空浏览器缓存再测试,避免旧缓存干扰。 - 如果
public目录下有实际存在的文件或子目录,规则会优先访问这些真实资源,不会触发重写。 - 若需要支持更多字符的页面名称,可调整正则表达式(例如添加下划线
_则改为^([a-z0-9-_]+)$)。
内容的提问来源于stack exchange,提问作者Patel Rohan
相关产品推荐
相关产品推荐

