从 URL 中删除目录,同时保留重定向

Remove directory from URL while preserving the redirects

我有一个重定向。如果请求进入根并且内容在 /website3 中可用,它会从 website3 中提取内容,但只显示根请求。这真的很好用。例如,一个请求进来了,例如 com/foo/test/ 并且 /website3/foo/test 中有一个 index.htm 文件,内容显示时不包括 url 中的 website3。如果像 example 一样存在不同的路径,它也能很好地播放。com/test 它将转到测试目录。这一切都很完美。

我正在尝试排除请求是否来自 example.com/website3/foo/test 我希望将其重定向到示例。com/foo/test 但仍会从 website3 中提取内容。我尝试了一些方法,但它们都导致了循环。

这是当前代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# Remove trailing slash on any URL that is requested directly (excludes rewritten URLs)
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*)/$ / [R=301,L]

# Rewrite root
RewriteRule ^$ website3/ [L]

# If request maps to a directory in "/website3" then rewrite and append trailing slash

RewriteCond %{DOCUMENT_ROOT}/website3/ -d 
RewriteRule ^([^.]+)$ website3// [L]
RewriteCond %{DOCUMENT_ROOT}/website3/ -f 
RewriteRule (.*) website3/ [L]

RewriteEngine 指令后立即添加以下内容,以从直接请求的任何 URL 的开头删除 /website3/

# Remove "/website3/" from any URL requested directly
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^website3/(.*) / [R=301,L]

请注意,这会检查 REDIRECT_STATUS env var 以防止重定向循环 - 与删除尾部斜杠的规则相同。

初始请求中未设置 REDIRECT_STATUS env var(即为空),并在第一次成功重写后设置为“200”(如 200 OK HTTP 状态)。

首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。