Apache RewriteRule访问密码保护网络路径的404问题求助
解决Apache Rewrite跳转至认证文件夹的404问题
方案一:代理模式传递全局认证凭据
当目标目录需要HTTP Basic认证时,单纯的RewriteRule跳转不会自动携带凭据,需将请求转为代理模式并配置全局凭据:
- 确保Apache已启用
mod_rewrite、mod_proxy、mod_proxy_http模块 - 修改Rewrite规则,添加
[P]标志标记为代理请求:
RewriteEngine on RewriteRule ^/video/(.*) http://10.42.1.51/qnap/SessionVideos/$1 [P,T=video/webm]
- 在Apache全局或虚拟主机配置中添加代理认证:
<Proxy http://10.42.1.51/qnap/SessionVideos/*> # 替换user:pass为实际凭据,先通过base64编码(echo -n 'user:pass' | base64) ProxySet headers="Authorization: Basic dXNlcjpwYXNz" </Proxy>
方案二:前端认证反向传递凭据
如果希望让访问/video的用户自行输入凭据,可将前端认证信息直接传递给后端:
- 配置前端路径的Basic认证:
<Location /video> AuthType Basic AuthName "Video Access" AuthUserFile /path/to/your/.htpasswd Require valid-user </Location>
- 修改Rewrite规则并开启凭据传递:
RewriteEngine on RewriteRule ^/video/(.*) http://10.42.1.51/qnap/SessionVideos/$1 [P,T=video/webm] ProxyPassReverse /video http://10.42.1.51/qnap/SessionVideos/ ProxyRequests Off # 将用户输入的凭据传递给后端服务器 RequestHeader set Authorization %{HTTP:Authorization}s
方案三:URL嵌入凭据(仅测试用,禁止生产环境)
虽然可以直接在目标URL中写入user:pass@,但凭据会暴露在日志、缓存中,风险极高,仅用于临时测试:
RewriteEngine on RewriteRule ^/video/(.*) http://user:pass@10.42.1.51/qnap/SessionVideos/$1 [T=video/webm]
内容的提问来源于stack exchange,提问作者Erwin Kloibhofer
相关产品推荐
相关产品推荐

