如何用域名相关URL路径替代%{REQUEST_FILENAME}?
解决.htaccess RewriteCond检查URL路径而非物理路径的问题
原规则失效的核心原因是%{REQUEST_FILENAME}指向服务器物理文件路径,新服务器的物理路径包含点(比如AlmaLinux环境下网站根目录可能带点结构),导致RewriteCond %{REQUEST_FILENAME} !\.条件不成立,规则无法触发。
要实现仅检查域名对应的URL路径是否不含点,直接用%{REQUEST_URI}替换%{REQUEST_FILENAME}即可,%{REQUEST_URI}代表客户端请求的URL路径(如/file/value),与服务器物理路径完全无关。
修改后的完整规则:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !\. RewriteRule ^file/([a-z0-9-]+)/?$ /result.php?key=$1 [NC,L]
额外优化说明
如果你的需求只是确保file/后面的参数不含点,其实可以把第三个条件直接合并到RewriteRule的匹配模式里——原规则的捕获组([a-z0-9-]+)已经限制了参数只能是字母、数字和连字符,天然排除了点,这样可以简化规则:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^file/([a-z0-9-]+)/?$ /result.php?key=$1 [NC,L]
内容的提问来源于stack exchange,提问作者Mm-Art-In
相关产品推荐
相关产品推荐

