0

在 .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 而不循环

4

1 回答 1

0

在 mod_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]
于 2013-07-23T13:56:07.353 回答