2010-07-20 71 views
1

我想將所有請求重定向到我的服務器(/ app)上的某個路徑到/ app/app_site的子目錄。以下重寫規則對於像'http://localhost/app/somepage.htm的要求做的工作:重定向到子文件夾時始終保留URL

RewriteCond %{REQUEST_URI} !^/app/app_site.*$ 
RewriteCond %{REQUEST_URI} !^/app_site.*$ 
RewriteRule ^/app(.*)  /app/app_site$1 [L,PT] 

這導致正確的頁面,同時保留URL。此外,'http://localhost/app/'將在/app/app_site/index.html獲取索引頁,同時保留網址'http://localhost/app/'。

然而,當我輸入 'http://localhost/app',下面的事情發生:

我快到了,但想在所有情況下保留URL(也包括沒有結尾的斜線)。任何人都有線索如何做到這一點?謝謝!

回答

1

這是DirectorySlash啓用時的預期行爲,因爲您已將其重寫爲缺少尾部斜槓的目錄,並且mod_dir在用mod_rewrite重寫了URL後執行了此清理。

的最簡單的解決方案是重寫的URL,使得其總是斜線封端的目錄路徑至少相匹配,像這樣:

RewriteCond %{REQUEST_URI} !^/app/app_site.*$ 
RewriteCond %{REQUEST_URI} !^/app_site.*$ 
RewriteRule ^/app/?(.*)$  /app/app_site/$1 [L,PT] 

這防止mod_dir從具有添加的結尾的斜線,並且因此避免了您現在正在經歷的外部重定向爲/app/app_site/

+0

完美,萬分感謝!這個例子的作用就像一個魅力。但是,我的真實應用仍然存在問題。我簡化了這個例子,但實際上,/ app是一個通過Tomcat通過mod_jk提供的Cocoon應用程序。現在,無論何時激活mod_jk指令,「http:// localhost/app」和「http:// localhost/app /」都會被重寫爲「http:// localhost/app/app_site /」(所有包含更多路徑的URL儘管如此)。你碰巧知道是什麼原因造成這種干擾以及如何解決它? – rvdb 2010-07-20 19:48:39

+0

從用戶瀏覽器中URL更改的意義上講,它們被重寫了嗎?你如何定義你的'mod_jk'處理程序? – 2010-07-20 23:15:28

+0

嗨蒂姆,我已經調查過這個問題,並被你的答案放在了正確的軌道上。我沒有爲mod_jk處理程序配置特殊選項;只有一條規則:/ app |/* = ajp13。 我意識到我的繭應用的sitemap.xmap也指定了一個重定向,以便在請求空路徑('/ app /')時提供默認主頁: 這將請求傳遞給另一個cocoon管道。碰巧,這相當於外部重定向,導致URL('/ app /')被重寫爲'/app/appindex.xml'。 [...] – rvdb 2010-07-21 08:32:16

相關問題