2012-02-07 80 views
0

我已經創建了一個控制器文件來處理將用戶重定向到正確的URL,我希望將某些流量引導到此控制器,而不會影響其餘的。 http://website.com/shows.php?id=review-1是我想要發送給控制器的url的示例。只使用RewriteRule將某些請求重定向到控制器文件

我到目前爲止炮製的是以下RewriteRule這會導致站點範圍的服務器500服務器錯誤。

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\? 
RewriteCond %{QUERY_STRING} (?:^|&)id=review-[0-9]+(?:&|$) [NC] 
RewriteRule^/controller.php [QSA,L] 

%{QUERY_STRING}條件卸下-[0-9]+擺脫了站點範圍的500服務器錯誤的,但不起作用。以下RewriteRule,我試圖取代工作就好了。

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\? 
RewriteCond %{QUERY_STRING} (?:^|&)id=review-1(?:&|$) [NC] 
RewriteRule^/review/1/super-baseball-2020/? [R=301,L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-z0-9]+)/([0-9]+)/([a-z0-9-]+)?/?$ /shows.php?id=$1-$2 [QSA,L,NC] 

最終的結果是,誰去http://www.website.com/shows.php?id=review-1用戶將在http://www.website.com/controller.php?id=review-1將處理處理301重定向結束。

+0

規則我的系統上正常工作。嘗試添加一些括號。難道你不能只用'RewriteCond%{QUERY_STRING}(^ |&)id = review- [NC]'?它會比你想要的要多得多,但可能沒有你真正用於別的東西的URL。 – Gerben 2012-02-07 20:16:06

回答

0

我仍然不知道爲什麼你試圖讓簡單的事情變成複雜的;)

6分鐘內找到+測試。下面是應該工作:

RewriteCond %{QUERY_STRING} (^|(.)+&)(id=review-([0-9]+))($|&.*) [NC] 
RewriteRule /shows.php /controller.php?%3 [QSA,L] 

PS:像德文,我不明白/知道爲什麼(?:^|&)作品...

0

有趣。不」看錯了,但我不能讓行

RewriteCond %{QUERY_STRING} (?:^|&)id=review-[0-9]+(?:&|$) [NC] 

在mod_rewrite的編譯,直到我拿出了非捕獲指標

RewriteCond %{QUERY_STRING} (^|&)id=review-[0-9]+(&|$) [NC] 

看起來編譯確定我的系統上,那對你有用嗎?

+0

我試過'RewriteCond%{THE_REQUEST}^GET \ s/shows \ .php \? RewriteCond%{QUERY_STRING}(^ |&)id = review-1(&| $)[NC] RewriteRule^/controller.php? [QSA,L]',它仍然導致500服務器錯誤。 (請注意,我僅將其更改爲評論-1而不是數字範圍) – 2012-02-07 03:27:13

0

我認爲你需要確定是什麼導致了500錯誤。我懷疑重定向正在工作,但是您被重定向到的頁面失敗。

相關問題