2011-08-05 77 views
0

我有一個URL重寫規則幫助

http://test.devsite-1.com/test/tbox/ 

,我想重定向到

http://tbox.devsite-1.com/ 

規則:

RewriteCond %{HTTP_HOST} !^tbox\.(.*)$ [NC] 
RewriteCond %{HTTP_HOST} ^(www\.|)(.*)$ [NC] 
RewriteCond %{REQUEST_URI} ^/tbox(/.*|)$ 
RewriteRule /tbox/(.*) http://tbox.%{HTTP_HOST}/$1 [R=301,L] 

我不明白爲什麼它不重定向我網址?請注意我需要一個通用規則,因此如果我將test.devsite-1.com更改爲tempo.devsite-1.com,則同樣應該與其他網址一起使用。

+0

已修改RewriteRule(。*)http://tbox.% {HTTP_HOST}/$ 1 [R = 301,L] ....這些都是我無法得到的問題... – user269867

+0

If request通過'test.devsite-1.com'然後'tbox.%{HTTP_HOST}'會生成'tbox.test.devsite-1.com' - 這顯然是錯誤的('%{HTTP_HOST}'包含完整的域NAME,不只是'devsite-1.com')。 – LazyOne

回答

1

試試這個規則:

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^test\.(.+)$ [NC] 
RewriteRule ^test/tbox/(.*)$ http://tbox.%1/$1 [R=301,L] 

這會重定向(301永久重定向)

http://test.devsite-1.com/test/tbox/something-optional 

http://tbox.devsite-1.com/something-optional 
  1. 它被放置在.htaccess文件中網站根文件夾(例如http://test.devsite-1.com/.htaccess)。如果放置在其他地方,可能需要進行一些調整。
  2. 只有當通過test.子域請求時纔會有效。
  3. 只有當請求的URL以test/tbox/開頭時,它纔會起作用。

以上所有內容都與您的URL示例匹配。

+0

是的,我想我現在明白了... – user269867

+0

你能告訴我%1和$ 1之間的區別嗎? – user269867

+0

'$ 1'是'RewriteRule'模式('^ test/tbox /(.*)$')中第一個匹配組的反向引用('('和')'之間的內容),而'%1'是反向引用在'RewriteCond'模式('^ test \。(。+)$')中是相同的。更多信息:http://httpd.apache.org/docs/current/rewrite/ – LazyOne