使用htaccess屏蔽域名和文件夹名称

时间:2013-02-19 21:37:38

标签: .htaccess mod-rewrite

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

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

当前的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

2 个答案:

答案 0 :(得分:2)

除了字符类之外,您不需要转义-。即使在那里,你也可以将它作为第一个或最后一个角色转发。

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

答案 1 :(得分: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文件中。

更新

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

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

这一个:

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