因此,我们试图将旧的子域重定向到我们的新域,并保持URL的其余部分不变。我们正在尝试将所有内容移至子目录。
通过以下操作很容易...
RewriteCond %{HTTP_HOST} ^test\.example\.com/$ [NC]
RewriteRule ^(.*)$ https://example.com/test-path/$1 [R=302,L]
但是,以前的某些站点URL实际上已经是test.example.com/test-path/
,因此我们希望这些站点的URL不在/test-path/
该规则正在转换这样的网址...
test.example.com/test-path/some-page
进入
test.example.com/test-path/test-path/some-page
所以现在我们正在尝试以下内容...
RewriteCond %{REQUEST_URI} !/test-path/
RewriteCond %{HTTP_HOST} ^test\.example\.com/$ [NC]
RewriteRule ^(.*)$ https://example.com/test-path/$1 [R=302,L]
尽管它将重定向到example.com/test-path/
,但现在它丢失了普通URL之后的所有内容。
test.example.com/test-path/other-path
被重定向到
example.com/test-path/
希望这对我们正在尝试做的事情有意义。将一个子域重定向到一个新域到一个子目录中,而不是将request-url目录加倍。
编辑:
最近一次尝试,似乎也不在乎该URL是否包含/test-path/
。无论如何,它仍然会重定向。
答案 0 :(得分:2)
RewriteCond %{HTTP_HOST} ^test\.example\.com/$ [NC] RewriteRule ^(.*)$ https://example.com/test-path/$1 [R=302,L]
我认为这只是您的问题(?)中的错字,但是您的主机名末尾有一个错误的斜杠-这将永远不匹配。
为避免在请求的URL上出现/test-path
时重复复制/test-path
,但仍将其重定向到RewriteCond %{HTTP_HOST} ^test\.example\.com [NC]
RewriteRule ^(?:test-path/)?(.*) https://example.com/test-path/$1 [R=302,L]
,您可以将其捕获为可选 URL路径,如果匹配则将其丢弃。例如:
$
我删除了 CondPattern 上的斜杠和结尾的(?:test-path/)?
,以使其与FQDN匹配(并因此规范化),并以点结尾。
test-path/
是一个捕获?
的非捕获组(因此不会创建任何反向引用)。然后使该组为可选项,并在其后跟RewriteCond %{REQUEST_URI} !/test-path/
RewriteCond %{HTTP_HOST} ^test\.example\.com/$ [NC]
RewriteRule ^(.*)$ https://example.com/test-path/$1 [R=302,L]
。
旁边:
/test-path/
如果在请求的URL中的任何位置出现/test-path/
,此操作将无效。因此,如果您看到重定向,则似乎是“其他”!
最近一次尝试,似乎也不在乎该URL是否包含
.htaccess
。无论如何,它仍然会重定向。
正如我所说,必须做些其他事情。可能与其他指令冲突?您是否正在混合来自mod_alias和mod_rewrite的重定向?
请注意,这些重定向应放在File:
a smallint
b timestamp
c date
d varchar
O/P:
a smallint
dateformat(b,'YYYY-MM-DD HH:NN:SS.sss')
dateformat(c.'YYYY-MM-DD')
d varchar
文件的顶部。