请求协助:.htaccess实现带查询字符串的目录到文件重定向
解决OpenSpeedLite下.htaccess目录重定向问题
问题分析
原规则存在几个核心问题导致失效:
- 多
RewriteCond需同时满足才触发规则,但原URL缺少proc和etime参数,直接跳过规则执行 RewriteRule匹配模式错误:.htaccess放在/subdir下,RewriteBase /subdir/生效后,匹配路径是相对于/subdir的部分,原请求路径为/(即subdir/),模式不应包含/subdir/- 手动拼接查询字符串易出错,且无需重复捕获参数,
QSA标志可自动保留原查询串
正确的.htaccess规则
将以下内容替换原规则,保存到/subdir/.htaccess中:
RewriteEngine On RewriteBase /subdir/ # 确保查询字符串包含task、pid、lang参数(可按需调整参数检查) RewriteCond %{QUERY_STRING} (^|&)task=[^&]+(&|$) RewriteCond %{QUERY_STRING} (^|&)pid=[^&]+(&|$) RewriteCond %{QUERY_STRING} (^|&)lang=[^&]+(&|$) # 匹配/subdir/目录请求 RewriteRule ^$ myfile.php [L,QSA]
规则说明
RewriteCond部分:检查查询字符串中是否存在指定参数,适配参数在开头、中间或结尾的情况RewriteRule ^$ myfile.php:匹配/subdir/的目录请求(相对于subdir的路径为空),重定向到同目录下的myfile.php[L,QSA]:L表示终止后续规则执行,QSA自动将原查询字符串追加到目标URL后,无需手动拼接
简化版(无需严格检查参数)
如果只要是/subdir/?xxx格式的请求都需重定向,可使用更简洁的规则:
RewriteEngine On RewriteBase /subdir/ RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{QUERY_STRING} .+ RewriteRule ^$ myfile.php [L,QSA]
逻辑:若请求为真实目录(/subdir/)且查询字符串非空,直接重定向到myfile.php并保留原查询串
内容的提问来源于stack exchange,提问作者Brian Tracy
相关产品推荐
相关产品推荐

