2012-07-09 58 views
0

首先,這裏是我的.htaccess:

RewriteEngine On 
Options FollowSymLinks 

# check if url ends in a slash and if it does redirect to same url without one 
RewriteCond %{REQUEST_URI} !-d 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(([^/]+/)*([^/.]+))/\ HTTP/ 
RewriteRule ^(([^/]+/)*([^/.]+))/$ http://localhost/example/$1 [R=301,L] 

# extionless url rewrite for urls in form example.com/cmd 
RewriteRule ^([^/.]+)$ index.php?cmd=$1 [L,QSA] 

# extionless url rewrite for urls in form example.com/cmd/action 
RewriteRule ^([^/]+)/([^/.]+)$ index.php?cmd=$1&action=$2 [L,QSA] 

# extionless url rewrite for urls in form example.com/cmd/ajax 
RewriteRule ^([^/]+)/([^/]+)/([^/.]+)$ index.php?cmd=$1&action=$2&ajax=$3 [L,QSA] 

所以這個工程的URL重寫罰款。但是,在向PHP提交表單後,當我查看Firebug時,它的狀態爲「永久移動」。我很確定問題是這條線:

RewriteRule ^(([^/]+/)*([^/.]+))/$ http://localhost/example/$1 [R=301,L] 

但我不知道如何解決它。我想保持mod_rewrite完全按照它的功能來做,但我需要修復這個問題。

感謝您的幫助!

編輯:我也想提一下,如果我使用jQuery的.ajax發送數據從JavaScript到PHP並有類型發佈,它確實工作。而且,$ _GET無論如何工作。從HTML發送到PHP時,$ _POST不起作用。

回答

2

您正在強制客戶端重定向,這意味着瀏覽器將通過GET請求指定的新頁面 - 這是您的表單數據丟失的地方。 POST數據不會通過重定向保留,因爲新頁面不是通過POST加載的。

+0

那麼我該如何解決這個問題呢?我意識到它正在迷失。但是我對mod_rewrites知之甚少,無法知道如何修改我的正確工作。順便說一句,感謝您的快速回復! – user1513171 2012-07-09 21:47:23

+0

你在做POST請求時會傳遞查詢變量的原因是什麼?這些查詢變量可以作爲隱藏字段嵌入到表單中。 – 2012-07-09 21:48:55

+0

是的,這些查詢變量是必要的。我在我正在創建的框架中設置了一個前端控制器模式,而cmd和action是幾乎可以運行它的兩個變量。因此,如果用戶轉到/ example/profile/someThing,我的框架將發送用戶到index.php?cmd = profile&action = someThing,然後index.php(我的前端控制器)使用配置文件調用正確的命令,和一些Thing調用命令的正確方法。 – user1513171 2012-07-09 22:22:42