2012-04-27 88 views
1

也許我試圖做一些不可能的事情,或者我錯過了一些完全明顯的東西。mod_rewrite在重寫的URL中包含一個問號

我想要做的就是改寫如下:

^/report/user?(.*)$ ./report/user.php?userid=$1 [L,NC] 

我曾嘗試使用/\?但是逃避?拋出和內部服務器錯誤。

有什麼辦法可以達到這個目的嗎?

+0

你可以用'%{QUERY_STRING}'來得到查詢字符串,但錯誤可能是別的。指令的其餘部分是什麼? – craniumonempty 2012-04-27 18:49:30

+0

我唯一的重寫規則是一個,所以無論那個:) – lethalMango 2012-04-27 18:51:15

+0

'RewriteRule' _pattern_匹配URL路徑,它排除了查詢字符串。 – MrWhite 2013-11-14 01:51:09

回答

2

也許你可以試試:

RewriteCond  %{QUERY_STRING} ^([0-9]+)$ 
RewriteRule  ^/report/user$ ./report/user.php?userid=%1 [L,NC] 

如果您的用戶ID是字母數字,那麼就改變最後一部分在RewriteCond([0-9a-zA-Z]+)

+0

啊,甚至沒有想過要問只有用戶名是在'?'後面。這樣做更有意義。 – craniumonempty 2012-04-27 19:31:39

+0

這只是我的假設,從問題的代碼看起來是什麼樣子;) – jCoder 2012-04-27 19:34:49

1

好吧,一個?是1或0次正則表達式,所以你問r有1或0次,抓住一切。如果你想捕捉的查詢字符串到另一個查詢(而不是僅僅將其傳送)然後嘗試:

RewriteRule ^/?report/user$ /report/user.php?userid=%{QUERY_STRING} [L,NC] 

...在本地機器上測試?a=1&b=2 - >?userid=a=1&b=2所以可能不是你想要的

不確定對於查詢字符串的結果如何,但它應該傳遞它。試用R標誌來查看它的外觀。如果你只是想添加到查詢字符串,你可以嘗試:

RewriteRule ^/?report/user$ /report/user.php?userid=1 [L,NC,QSA] 

..在本地機器上測試,查詢字符串?a=1&b=2 - >?userid=1&a=1&b=2

只是改變了位置,而不改變查詢不需要QSA

RewriteRule ^/?report/user$ /report/user.php [L,NC] 

..在本地機器上測試,查詢字符串?a=1&b=2 - >?a=1&b=2

你可以在這裏測試重寫,如果你想http://htaccess.madewithlove.be/,只記得它翻一次,所以可以只測試基本的東西。我不認爲QSA(查詢字符串追加)被編程,但它仍然是一個體面的工具。