2

#1的用戶,阿帕奇mod_rewrite的 - 重定向失去POST數據 - 405錯誤

我有一個需要接受張貼到以下路徑數據的Apache應用程序:

/sample/HostChange/Submit 
/sample/HostChange/SubmittoAPI 

我目前使用以下301重定向規則。這不是我想要的,因爲POST被重定向,第二個請求是GET丟失所有數據。我看到301請求轉到正確的url,但第二個請求是GET並導致405響應代碼。

的.htaccess:

RewriteEngine On 
Redirect 301 /sample/HostChange/Submit /event 
Redirect 301 /sample/HostChange/SubmittoAPI /date 

我敢肯定,使用重定向是問題。有人可以幫我弄清楚我需要使用的正確的RewriteCondition將這些POST命中重定向到新的路徑,但保持提交給應用程序的數據。

謝謝mucho。

+0

¿您是否嘗試過使用國防部重寫?我問的原因是在重定向(httpd.apache.org/docs/2.2/mod/mod_alias.html)指示''舊的URL路徑是一個區分大小寫(%解碼)的路徑...「和這可能會修改POST,這反過來可能會影響下一個GET。只是一個想法,但如果是這樣的話,你應該嘗試使用mod-rewrite來代替。 –

+0

我正在使用mod_rewrite。 – god

+0

除非我遺漏了一些東西,否則您正在使用重定向,這是[mod-alias](http://httpd.apache.org/docs/2.2/mod/mod_alias.html)指令。我的意思是RewriteRule,它是一個[mod-rewrite](http://httpd.apache.org/docs/current/mod/mod_rewrite.html)指令。 –

回答

0

我不認爲你可以重定向POST(作爲POST)。瀏覽器不會再次發佈數據。

你必須使用Javascript輸出一些HTML,以使瀏覽器將數據恢復到新的URL。

或者不是重定向,而是先讓一些服務器端代碼接受POST數據,然後在內部以某種方式調用它(可能會在URL中使用標識的令牌重定向)。

或者如果數據很短,請重新編寫URL以包含數據作爲查詢參數。

+0

另請參閱此問題的關於嘗試使用303重定向的答案:http://stackoverflow.com/questions/7574068/about-redirect-as-post – Thilo

+0

我認爲應該是307,而不是303. – Gerben

0

沿着下面的一些東西應該工作,我現在不在apache實例周圍,所以正則表達式沒有嘗試,但請檢查重寫日誌,看看它的行爲。

RewriteEngine On 
RewriteLog /var/log/httpd/rewrite.log 
RewriteLogLevel 9 
RewriteCond %{REQUEST_URI} /sample/HostChange/Submit 
RewriteRule ^/sample/HostChange/Submit(.*) /event/$1 [P,L] 
+0

這沒有用。 404響應碼。 – god

+0

你可以請示出Apache正在寫入什麼來改寫日誌記錄,以提交/ sample/HostChange/Submit嗎?正如我所說我沒有檢查正則表達式,但上述結構將保留你的有效載荷,如果有的話,還有查詢參數,如果有任何請求原始URL。我在生產中使用類似的東西來根據URL模式將請求重定向到zope或jboss。 – opensourcegeek

0

我有一種同樣的問題,對我來說,它幫助不重定向請求,而是重寫它。如果這適用於您的問題,我現在不會。

下面是詳細信息和它的工作對我來說: PHP Rewrite url and preserve posted data