使用.htaccess将前缀重定向到文件夹

时间:2013-07-22 13:22:06

标签: .htaccess

在.htaccess我已经:

RewriteRule ^(.*)/(.*.html)(\?.*)?$ /scripts/engine.php?path=$1/$2 [QSA,L,PT]
RewriteRule ^(.*)/$ /scripts/engine.php?path=/$1/ [QSA,L,PT]
RewriteRule ^$ /scripts/engine.php?path=/ [QSA,L,PT]

我想添加

的重定向
<prefix>.<domain>.com to <prefix>.<domain>.com/<folder>

如何在遵守先前规则的同时做到这一点

------感谢谁回答了

感谢 它按照这个顺序排列

RewriteCond %{HTTP_HOST} ^prefix1\.domain\.com
RewriteCond %{REQUEST_URI} !^/edt_oracle_awr/
RewriteCond %{REQUEST_URI} !^/edt_mysql_slow/
RewriteCond %{REQUEST_URI} !^/edt_sybase_checkmep/
RewriteRule ^(.*)$ http://prefix2.domain.com/folder/$1 [R=301,L,QSA]
RewriteRule ^(.*)/(.*.html)(\?.*)?$ /scripts/engine.php?path=$1/$2 [QSA,L,PT]
RewriteRule ^(.*)/$ /scripts/engine.php?path=/$1/ [QSA,L,PT]
RewriteRule ^$ /scripts/engine.php?path=/ [QSA,L,PT]

如何隐藏重定向?浏览器将显示prefix1.domain.com而不循环

1 个答案:

答案 0 :(得分:0)

在mod_rewrite中有两个概念,名为redirect和internal rewrite。

<强>重定向

Mod_rewrite可以将请求从a重定向到b。这由规则背后的[R]标志表示。如果用户请求,例如http://foo.example.com,您可以将其重定向到http://bar.example.com。这样做的是,您告诉客户端页面已移至http://foo.com并且他们应该将请求重做到该URL。它会在地址栏中显示http://foo.com

内部重写

如果要显示的文件位于同一文件系统中,则Mod_rewrite也可以在内部重写url。这由[R]标志的缺席表示。如果用户请求http://foo.example.com,则会在内部将其重写为http://bar.example.com也可以访问的文件,假设foo.example.combar.example.com位于同一文件系统中。这会在地址栏中显示http://foo.example.com,但实际上会显示http://bar.example.com也可以访问的文件。请注意,搜索引擎会认为它们是2个不同的页面,内容完全相同,并且可能会对您的网站造成不利影响。

您的案例

在你的情况下,你似乎要求内部重写而不是像标题所暗示的重定向。没有文件系统的结构,我无法真正测试任何东西,但这样的东西就足够了。

RewriteRule ^path/to/subdomain1/(.*)$ path/to/subdomain2/$1 [L]