我有 cname,并且将它们直接指向不同的目录。这部分有效。但是,我希望能够重定向 todigra.org/inded.php/dl 至 dl.digra.org/index.php/dl 和 dl.digra.org/index.php/todigra 至 todigra.org/inded.php/todigra
并在重定向中包含 dl 或 todigra 之后的路径。
通过 todigra.org 访问 dl ,反之亦然,我在 seller.google.com 等方面遇到一些有问题的索引。
我尝试过充实。如前所述,前两次重写做了他们应该做的事情,但我不知道如何制定第二个重写
RewriteCond %{HTTP_HOST} ^dl\.digra\.org
RewriteRule ^$ /index.php/dl [R=permanent,L]
RewriteCond %{HTTP_HOST} ^todigra\.org
RewriteRule ^$ /index.php/todigra [R=permanent,L]
RewriteCond %{HTTP_HOST} ^todigra\.org
RewriteRule "^/index.php/dl/(.+)$" "http://dl.digra.org/index.php/dl/$1" [R=permanent,L]
RewriteCond %{HTTP_HOST} ^dl\.digra\.org
RewriteRule "^/index.php/todigra/(.+)$" "http://todigra.org/index.php/todigra/$1" [R=permanent,L]
最后两个重写规则条件对似乎没有做任何事情。我期待这会重写 https://todigra.org/index.php/dl/article/view/1898为https://dl.digra.org/index.php/dl/article/view/1898
RewriteCond %{HTTP_HOST} ^todigra\.org RewriteRule "^/index.php/dl/(.+)$" "http://dl.digra.org/index.php/dl/$1" [R=permanent,L]
RewriteRule
pattern(第一个参数)匹配的URL路径NOT以斜杠开头,因此这两个规则永远不会匹配。但是,它们都不会匹配 /index.php/dl
(甚至 /inded.php/dl/
),因为您的正则表达式仅匹配 /index.php/dl/<something>
。
您需要执行以下操作:
RewriteCond %{HTTP_HOST} ^todigra\.org [NC]
RewriteRule ^index\.php/dl(/.*)?$ http://dl.digra.org/index.php/dl$1 [R=permanent,L]
现在匹配
index.php/dl
和 index.php/dl/
和 index.php/dl/<something>
并重定向到相应的 URL。
请注意,我在反向引用中包含了斜杠,因此它已从 substitution 字符串中删除。
请注意,您正在重定向到 HTTP,而不是 HTTPS?
旁白:
但是,在这种情况下实现外部重定向一开始看起来就是错误的。 看起来您正在从所需的规范 URL 重定向到非规范/隐藏 URL?如果可以的话,
index.php
通常不应出现在可见的 URL 中。它看起来这些应该是内部重写(正如您在上一段中所述,但这可能只是术语的混合?重写/重定向?)加上两个规范的重定向来更正主机名和删除非规范 URL 路径?
您所说的“有效”的前两个重定向仅重定向对根的请求(无 URL 路径),而后两个重定向则处理 URL 路径。这看起来不正确。例如,如果您收到
https://dl.digra.org/<something>
的请求怎么办?