2014-06-06 159 views
0

所以我的staff.php?action=[action]文件被重寫爲/staff/[action],其中action可以取3個值new/edit/deleteApache mod_rewrite查詢字符串

我想在提交時顯示成功或失敗消息。我試圖重定向到/staff/new&error=[error]/staff/new?error=[error]

但是,var_dump($_GET)只返回action的查詢字符串。

我找到的唯一解決方案是/staff?action=[action]&error=[error],但我不喜歡它。有什麼方法可以重寫我的規則嗎?

我不想/staff/new/error/[error]

## hide .php extension snippet 
# To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R,L] 
# To internally forward /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*?)/?$ $1.php [L] 

RewriteRule ^staff/(.+)$ /staff.php?action=$1 [L] 
+1

添加重寫規則,你可能缺少[QSA] ,但這只是一個猜測,因爲沒有代碼。 – Dexa

+1

我想要很多東西,但是你不願意向我們展示你的重寫規則嗎? –

回答

2

您可以使用QSA標誌查詢字符串添加到您的轉發頁面

RewriteRule ^staff/(new|edit|delete)$ /staff.php?action=$1 [L,QSA] 
+0

好吧,但如果有人輸入'/ staff/new&a = b'會怎麼樣?我會得到'500內部服務器錯誤' –

+0

你爲什麼要這樣做?它會被轉發到'/staff.php?action = new&a = b'。無論如何,出於安全原因,你總是應該檢查你的GET參數。在這種情況下是否只有'error'參數可以添加到查詢字符串中?如果是,那麼可以添加一個條件來匹配這種可能性 –

相關問題