我正在尝试使用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
以下是我的目录视图:
答案 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]