2010-02-11 94 views
2

我允許用戶在mysite.com/go/QUERY \Apache Django URL問題

上提交查詢

如果查詢包含「/」Apache扼流圈。

從urls.py:

(r'^go/(?P<querytext>.*)$', 'mysite.engine.views.go'), 

嘗試:

http://mysite.com/go/http%3A%2F%2F 

結果:

Not Found 

The requested URL /go/http:// was not found on this server. 
Apache/2.2.12 (Ubuntu) Server at ... 

但是,如果我進入非URL引用的值它的工作原理: http://mysite.com/go/http:// WORKS蠻好的...

任何想法?

回答

3

您的httpd阻止了編碼的斜槓。

嘗試加入AllowEncodedSlashes On到你的Apache配置到enable encoded slashes in apache (docs)

+0

不錯的一個!我甚至沒有想到將Apache視爲罪魁禍首。 – jathanism 2010-02-11 06:53:02

+0

謝謝,我遇到了同樣的問題。我懷疑Apache是​​原因,但我沒有意識到這是明確的。 – Cerin 2012-03-08 19:50:11

2

從Django文檔看來,在實現已命名組(http://docs.djangoproject.com/en/1.1/topics/http/urls/#named-groups)時,您只應使用(?P....)表示法。

嘗試通過兩種擺脫?P的固定你的正則表達式或完成的語法和命名一樣(?P<search-term>.*)

+0

抱歉,HTML把說出來,我編輯它顯示我真正有urls.py.正如你指出的那樣。 – Art 2010-02-11 06:02:21

0

組看起來你可能需要你傳遞下去之前將其URL解碼。你可以用urllib.unquote來做到這一點。

>>> import urllib 
>>> urllib.unquote("""http%3A%2F%2F""") 
'http://'