2011-09-17 34 views
0

我試圖讓我的網址看起來「更好」。而不是x.com/reset-password/[email protected],我希望它是x.com/reset-password/[email protected]htaccess重定向循環

使用mod_rewrite,我已經得到它適用於除句點(。)之外的每個相關字符串。當我在RewriteRule語句中允許點時,會發生內部服務器錯誤。我認爲這是因爲即使應用了L標誌,它也必須將最後一次重定向到新目標,並因此進入無限循環,因爲我的正則表達式太寬鬆。

我試圖使用RewriteCond來阻止任何帶有等號的URI來重定向,因此解決了無限循環問題,但它沒有正確應用。我問了兩個解決方案之一,我想:要麼辦法,包括在原正則表達式或辦法阻止與=的URI被評價期間

原正則表達式:

RewriteRule ^([^.]+)$ ?email=$1 [L] 

的修改之一:

RewriteCond %{REQUEST_URI} ^[^=]+$ 
RewriteRule ^(.+)$ ?email=$1 [L] 

我知道有很多的正則表達式/ htaccess的教​​程在線(我已經花了幾個小時來閱讀他們...),但我似乎無法弄清楚。任何幫助表示讚賞!

回答

1

你應該使用QUERY_STRING代替REQUEST_URI因爲=是在QUERY_STRING

RewriteCond %{QUERY_STRING} ^[^=]+$ 
RewriteRule ^(.+)$ ?email=$1 [L] 
+0

我後期的答覆道歉,但我想確保我之前沒有做任何其他錯誤響應。這一改變似乎沒有什麼區別。無論在目錄之後發生什麼,使用此文件都會導致內部服務器錯誤。有什麼需要改變的默認配置?有一個更簡單的解決方案嗎?我基本上只是想添加?email =任何URL說,然後停止重定向。 – Jack