在Apache2中,我想使用htaccess将一些路径重定向到指定目录,将所有其他路径重定向到其他目录。
在我的根Apache2目录(/var/www/html
)中,我有一个结构:
/var/www/html
├── a
│ ├── aa.html
│ ├── .htaccess
│ └── index.html
├── b
│ ├── bb.html
│ └── index.html
├── .htaccess
└── index.html
我的根.htaccess:
RewriteEngine On
# Redirect some paths to the /a
RewriteRule ^x(.*)$ /a/$1 [L]
# Redirect everything else to /b/
RewriteCond %{REQUEST_URI} !^/b/
RewriteRule ^(.*)$ /b/$1 [L]
# or
#RewriteRule !^b/ /b%{REQUEST_URI} [L]
它运作良好:
现在我想制作完全相同的重定向,但是从我的路径的root用作任何子目录开始,例如linux上的userdir。
让我说我的结构:
/home/radzikowski/public_html/test
├── aa
│ ├── aa.html
│ ├── .htaccess
│ └── index.html
├── bb
│ └── index.html
├── .htaccess
└── index.html
现在:
使用相同的.htaccess当然会尝试使用/var/www/html
中的文件,例如http://localhost/~radzikowski/test/重定向(内部)到http://localhost/bb/并尝试加载/var/www/html/bb/index.html
。
我尝试使用BASE
变量,但没有成功。例如:
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{REQUEST_URI} !^%{ENV:BASE}/bb/
RewriteRule ^(.*)$ %{ENV:BASE}/bb/$1 [L]
导致许多重定向导致HTTP 500错误。
我的/home/radzikowski/public_html/test/.htaccess
文件如何将给定路径重定向到子目录?
使用硬编码的RewriteBase
不是一个选项,此配置应该与位置无关。
Apache mod重写配置不是问题,它是为userdir启用的(并且有AllowOverride All
)。
答案 0 :(得分:0)
在/test/.htaccess
中尝试这两条规则:
RewriteEngine On
# Redirect some paths to the /a
RewriteRule ^x(/.*)?$ a$1 [L,NC]
# Redirect everything else to /b/
RewriteRule !^b/ b%{REQUEST_URI} [L,NC]