2012-05-02 26 views
0

看起來像一個簡單的問題。但我根本不明白:簡單的正則表達式在htaccess中不起作用

這片htaccess的規則做的工作:

RewriteEngine On 
RewriteRule ^m(.+)$ ?s=$1 

但這並不:

RewriteEngine On 
RewriteRule ^(.+)$ ?s=$1 

它返回一個內部服務器錯誤。那個正則表達式有什麼問題?爲了工作應該改變什麼?

回答

0

我不知道什麼「不起作用」的意思,但我認爲它可能會卡在重寫循環中。

試試這個:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^?s= 
RewriteRule ^(.+)$ ?s=$1 

我沒有測試過這一點,但它應該做的僅僅是重寫,如果有已不是一個s參數添加?

+0

它不起作用。我解決了它,或者更準確地說,使用'RewriteRule ^([a-z] +)$?s = $ 1'來解決它(所以點從正則表達式中消失)。但問題依然存在:爲什麼'^(。+)$'沒有工作? –

+0

也許是同樣的原因,點也包括?=部分,所以它試圖不斷重寫它(使它成爲?s =?s =,?s =?s =?s =等)。通過將它限制爲以字母開頭的URI,它排除了?,基本上與我試圖做的一樣。 –

+0

我也想我知道我做錯了什麼,我應該逃脫了? (它在正則表達式中有一個特殊的功能)。 –

0

哦,我剛剛意識到你也可以在RewriteConds中查找實際的查詢字符串。您可以嘗試:

RewriteEngine On 
RewriteCond %{QUERY_STRING} !s= 
RewriteRule ^(.+)$ ?s=$1