2

我正在尝试使用 htaccess 和 mod_rewrite 将一个域及其两个子文件夹与另一个域屏蔽。例如:http://example.com/sub/sub-sub/tohttp://example-2.com/所以http://example-2.com/浏览器地址栏中显示的是内容,http://example.com/sub/sub-sub/而页面中显示的是内容。

我发现这个问题/答案应该可以做到这一点,但是当我实现它时它不起作用。

当前的htaccess:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+) [NC]
RewriteRule .*   http://example.com/sub/sub-sub/%1 [L]

Options -Multiviews

这是我的目录的视图:

http://i.imgur.com/nihz1al.png

4

2 回答 2

2

您不需要 escape -,除非在字符类中。即使在那里,您也可以将其作为第一个或最后一个字符不转义。

RewriteRule中,模式是针对 URL 路径而不是域进行测试的。如果需要针对域进行测试,可以使用RewriteCond

RewriteCond %{HTTP_HOST} !example-2.com
RewriteRule ^/?sub/sub-sub/(.*) http://example-2.com/$0 [R,L]

RewriteCond %{HTTP_HOST} example-2.com
RewriteCond %{REQUEST_URI} !^/?sub/sub-sub
RewriteRule .* sub/sub-sub/$0
于 2013-02-19T23:28:43.433 回答
2

你可以试试这个:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI}  !^/sub/sub-sub         [NC]
RewriteCond %{REQUEST_URI}  ^/(.*)                 [NC]
RewriteRule .*   http://example.com/sub/sub-sub/%1 [L]

永久重定向

http://example-2.com/anything

到:

http://example.com/sub/sub-sub/anything

假定所有字符串都是固定的,除了段路径anything

对于永久可见重定向,请替换[L][R=301,L].

上述规则集必须包含在http://example-2.com根目录下的一个 .htaccess 文件中。

更新:

要跳过任何没有路径的传入 URL 的规则,例如http://example-2.com/,替换此行:

RewriteCond %{REQUEST_URI} ^/(.*) [NC]

有了这个:

RewriteCond %{REQUEST_URI} ^/(.+) [NC]

于 2013-02-19T23:33:39.230 回答