如何移除表单action链接中间的.php?实现指定URL格式改写
解决移除URL中间.php后缀的问题
要实现把 localhost/shopproject/MassUpload/create_excel.php/createExcel 改写为 localhost/shopproject/MassUpload/create_excel/createExcel,你需要调整Apache的mod_rewrite规则,下面是具体的配置步骤:
1. 确保mod_rewrite已启用
首先确认你的Apache服务器已经开启了mod_rewrite模块:
- Linux服务器:通过
a2enmod rewrite命令启用,之后重启Apache服务 - Windows(XAMPP/WAMP):打开httpd.conf文件,取消注释
LoadModule rewrite_module modules/mod_rewrite.so这一行,再重启服务
2. 配置.htaccess文件
在你的MassUpload目录下创建或修改.htaccess文件,添加以下规则:
RewriteEngine On # 设置重写基础路径,根据你的项目实际部署位置调整 RewriteBase /shopproject/MassUpload/ # 外部重定向:把包含.php/的URL显示为去掉.php的版本 RewriteRule ^([^/]+)\.php/(.*)$ $1/$2 [R=301,L] # 内部转发:当访问去掉.php的URL时,实际转发到带.php的文件处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/(.*)$ $1.php/$2 [L]
规则细节解释:
RewriteEngine On:开启URL重写功能RewriteBase:指定重写的基础路径,确保规则在你的项目目录下精准生效- 第一条RewriteRule:匹配
xxx.php/yyy格式的路径,将其永久重定向为xxx/yyy(R=301),让浏览器地址栏更新为干净的URL;L标记表示这是当前请求的最后一条规则,不再继续处理后续规则 - 两条RewriteCond:排除实际存在的文件和目录,避免重写规则影响真实的静态文件(如图片、CSS)或文件夹访问
- 第二条RewriteRule:当用户访问
xxx/yyy时,服务器内部偷偷转发到xxx.php/yyy处理请求,浏览器地址栏始终保持干净的URL
3. 调整表单的action属性
最后,把你的表单action属性修改为新的URL:
<form action="localhost/shopproject/MassUpload/create_excel/createExcel" method="POST"> <!-- 表单内容 --> </form>
这样配置后,用户访问和提交表单时看到的都是去掉中间.php后缀的URL,同时服务器能正确处理原PHP文件的请求。
如果你的服务器是Nginx,对应的配置需要放在server块里,规则如下:
location /shopproject/MassUpload/ { # 外部重定向 rewrite ^/shopproject/MassUpload/([^/]+)\.php/(.*)$ /shopproject/MassUpload/$1/$2 permanent; # 内部转发 if (!-e $request_filename) { rewrite ^/shopproject/MassUpload/([^/]+)/(.*)$ /shopproject/MassUpload/$1.php/$2 last; } }
内容的提问来源于stack exchange,提问作者rhog23
相关产品推荐
相关产品推荐

