2016-08-15 87 views
0

我有一個在Apache服務器中託管的URL http://10.20.109.99:10034/a/b/c/d/index.html。我想使用RewriteRule通過忽略a/b/c來將URL縮短爲http://10.20.109.99:10034/d/index.html。我試過規則:httpd.conf中的Apache RewriteRule

<VirtualHost *:80> 
RewriteEngine On 
RewriteRule ^http://10.20.109.99:10034/d/index.html$ http://10.20.109.99:10034/a/b/c/d/index.html [R,L] 
</VirtualHost> 

和它的作品,當我在瀏覽器地址欄中的縮短網址的關鍵,然而,在地址欄中的URL會回來的重定向,隨後後變成長的URL,當我點擊其他菜單鏈接網址(如http://10.20.109.99:10034/a/b/c/d/FAQ.html)時,長URL將出現在地址欄中。

我要存檔的事情是當過我做任何事情,就像鑰匙在URL地址或者點擊其他菜單URL(同一d文件夾中),在地址欄中的URL將始終顯示縮短一個http://10.20.109.99:10034/d/[the_pages].html代替返回到長URL。

謝謝。

+2

'[R]'裝置重定向。丟失'R'並使用'[L]' – Rob

回答

0

你正在做的RewriteRule的用法是不正確的。

根據文檔匹配的模式是URL-Path,它是方案和主機名之後的「路徑」。

另外,目標位於同一個虛擬主機中,並且您不希望URL「更改」,因此重定向是內部的,而不是外部的,就像Rob標記的R標誌一樣。

所以基本上在內部重定向/d/index.html到你提到你想這個目標(在虛擬主機上下文中定義):

RewriteRule ^/d/index.html$ /a/b/c/d/index.html [L] 

然後採用相同的方法,以任何其他內部重定向你想製作。

參考文獻:
RewriteRule docs
Rewrite Flags
Context