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

如何通过.htaccess移除seminars.cgi实现URL路径简化?

解决Apache .htaccess移除URL中seminars.cgi的问题

你之前的Rewrite规则犯了个典型错误——RewriteRule匹配的是相对于当前.htaccess所在目录的请求路径,不需要带上域名(比如example.com),这就是配置失效的核心原因。

下面是能实现你需求的正确配置,我会拆解每个部分帮你理解:

Options +FollowSymlinks -MultiViews
RewriteEngine On

# 防止重写循环:如果请求已经指向seminars.cgi,就跳过后续规则
RewriteCond %{REQUEST_URI} !^/seminars.cgi
# 将所有非seminars.cgi的请求,内部转发到带seminars.cgi的路径
RewriteRule ^(.*)$ /seminars.cgi/$1 [L]

各规则详解:

  • RewriteCond %{REQUEST_URI} !^/seminars.cgi:这条条件是为了避免无限循环——当服务器内部转发请求到seminars.cgi时,不会再次触发重写规则。
  • RewriteRule ^(.*)$ /seminars.cgi/$1 [L]:
    • ^(.*)$:匹配所有请求路径(比如/seminar/1234或者根目录/)。
    • /seminars.cgi/$1:把匹配到的路径拼接在seminars.cgi后面,将/seminar/1234转换成/seminars.cgi/seminar/1234。
    • [L]:标记这是最后一条规则,匹配成功后就停止后续处理,提升效率。

额外注意事项:

  1. 确保Apache已经启用mod_rewrite模块,Linux系统可以通过a2enmod rewrite命令开启,之后重启Apache服务。
  2. 检查你的虚拟主机配置,必须设置AllowOverride All,否则.htaccess文件会被服务器忽略。
  3. 如果seminars.cgi不在网站根目录,需要把规则中的/seminars.cgi改成实际的绝对路径(比如/cgi-bin/seminars.cgi)。

配置完成后,用户访问https://example.com/seminar/1234时,服务器会内部转发到https://example.com/seminars.cgi/seminar/1234,地址栏不会显示seminars.cgi部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:57:08