Apache请求转发问题:无跳转实现路径映射(仅可操作.htaccess)
Apache内部重写实现URL映射(无重定向)
你之前的规则仅匹配了根路径(^$),所以只有访问站点根目录时会生效,带URI的路径(比如/example)不会被处理。同时需要添加条件避免重写循环,以及排除真实存在的文件/目录,确保只对不存在的路径做内部映射。
将.htaccess内容替换为以下规则:
RewriteEngine On # 排除已经指向/site/的请求,防止循环 RewriteCond %{REQUEST_URI} !^/site/ # 排除实际存在的文件 RewriteCond %{REQUEST_FILENAME} !-f # 排除实际存在的目录 RewriteCond %{REQUEST_FILENAME} !-d # 把所有请求内部重写到/site/路径下 RewriteRule ^(.*)$ /site/$1 [L]
规则说明:
RewriteCond %{REQUEST_URI} !^/site/:确保已经访问/site/开头的请求不会被再次重写,避免无限循环。!-f和!-d:如果用户请求的是服务器上真实存在的文件或目录,直接返回原内容,不进行重写(比如访问/favicon.ico这类真实文件时不会被映射到/site/favicon.ico)。RewriteRule ^(.*)$ /site/$1 [L]:捕获请求路径中的所有内容($1),内部映射到/site/$1,[L]表示这是最后一条匹配的规则,停止后续重写处理。
验证效果:
- 访问
site.com→ 内部显示site.com/site的内容(地址栏不变) - 访问
site.com/example→ 内部显示site.com/site/example的内容(地址栏不变)
内容的提问来源于stack exchange,提问作者Mayedl10
相关产品推荐
相关产品推荐

