htaccess将RewriteBase设置为Request URI的开头

时间:2013-07-23 17:23:47

标签: apache .htaccess mod-rewrite

如何将.htaccess文件中的RewriteBase设置为REQUEST_URI的第一部分(domain.com/path或domain.com/path/to/file会将RewriteBase设置为/ path)?

1 个答案:

答案 0 :(得分:2)

您无法动态设置RewriteBase,但您可以手动从%{REQUEST_URI}中提取第一条路径并手动将其添加到绝对网址路径目标。例如:

RewriteBase /
RewriteCond %{REQUEST_URI} ^/([^/]+)
RewriteRule ^foo$ /%1/bar.html [L]

此处,如果该规则位于网址路径/a/b/c中的htaccess文件中,并且您请求/a/b/c/foo,则该规则会将其重写为/a/bar.html

或者,如果你有很多规则并且你绝对需要%反向引用,你可以将它设置为htaccess文件最顶层的环境变量:

RewriteBase /
RewriteCond %{ENV:first_uri_path} ^$
RewriteCond %{REQUEST_URI} ^/([^/]+)
RewriteRule ^ - [E=first_uri_path:%1]

# then your rules:
RewriteCond %{HTTP_HOST} www\.(.*)
RewriteRule ^foo$ /%{ENV:first_uri_path}/bar.php?domain=%1 [L]

根据您对“动态RewriteBases”的实际计划,您不确定这对您来说是否可行。