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

如何通过.htaccess获取不带扩展名的当前文件名?

解决Apache RewriteRule动态匹配文件名的问题

我明白你想要实现的效果:当用户访问不带扩展名的URL(比如example.com/file)时,自动跳转到对应的file.php,同时保留原有的几个排除条件(比如排除domain.co及其子域名、排除真实存在的文件/目录等)。

你的核心问题是需要捕获请求URL中的不带扩展名的文件名,然后在RewriteRule中动态引用它。下面是修正后的完整规则:

RewriteCond %{REQUEST_URI} !/$ 
RewriteCond %{HTTP_HOST} !^domain\.co 
RewriteCond %{HTTP_HOST} !^[^.]+\.(domain\.co)$ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/([^/.]+)$ /$1.php [L]

关键修改点解释:

  • 捕获分组([^/.]+):这个正则表达式会匹配URL中从开头/之后的、不包含.和/的部分——也就是你要的不带扩展名的文件名(比如访问/file时,$1就会被替换成file)。
  • RewriteRule的目标/$1.php:这里用$1引用前面捕获到的分组内容,实现动态替换成对应的PHP文件。

额外注意事项:

  • 如果你是在.htaccess文件中使用规则(而非服务器配置文件httpd.conf),需要去掉开头的/——因为.htaccess中的路径是相对当前目录的,修改后的规则如下:
    RewriteCond %{REQUEST_URI} !/$ 
    RewriteCond %{HTTP_HOST} !^domain\.co 
    RewriteCond %{HTTP_HOST} !^[^.]+\.(domain\.co)$ 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^([^/.]+)$ $1.php [L]
    
  • 确保你的Apache已经启用了mod_rewrite模块,并且.htaccess文件所在目录的服务器配置中设置了AllowOverride All,否则规则无法生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:25:14