2016-08-23 59 views
1

除外我正在嘗試將所有請求(例如example.com/123example.com/any-url)重定向到check.php。但我不需要重定向這兩個請求:example.com/example.com/?i=1如何將所有請求重定向到check.php,但sample.com/index.html和sample.com/?i=1

這裏是我的.htaccess:

RewriteEngine on 
RewriteRule ^(|?i=1)($|/) - [L] 
RewriteRule .* check.php 

但這仍然一個重定向一切check.php我做了什麼錯?

+0

你明確需要重定向'/'和'/ index.html'嗎?應該將諸如'/?i = 2'的URL重定向?這應該是外部重定向還是內部重寫? – MrWhite

+0

我需要重定向到check.php,除了example.com,example.com/index.html和example.com/?i=1。沒有必要重定向URL,例如/?i = 2 – Kissless

+0

「沒有必要重定向URL,例如/?i = 2」 - 儘管您沒有明確地將此作爲要排除的URL之一,現在這將被重定向,除非你想排除所有'i = '? – MrWhite

回答

0
RewriteRule ^(|?i=1)($|/) - [L] 

不能與RewriteRule模式查詢字符串相匹配。只有URL路徑(明顯排除查詢字符串)可以在這裏匹配,您需要使用RewriteCond指令來匹配查詢字符串。 (然而,正則表達式看起來無效,我本來期望它已經產生了500錯誤。也就是說,如果它在所有被執行???)

儘量不要使用以下:

RewriteEngine On 
RewriteCond %{QUERY_STRING} !^i=1$ 
RewriteRule !^(index\.html)?$ check.php [L] 

對於所有除文檔根目錄(和/index.html)以外的請求不包含查詢字符串i=1,然後重寫爲check.php

請注意,這是一個內部重寫,而不是外部重定向。

+0

我已經更新了我的答案,以包含'index.html'。 – MrWhite

+0

謝謝你的回答。試過這一個,但仍然如果我嘗試example.com或example.com/?=1它將我重定向到check.php。我應該以某種方式屏蔽問號嗎? – Kissless

+1

「或example.com/?=1」 - 大概你的意思是「i = 1」?通過「重定向」,你的意思是你實際上被重定向到'check.php'(即你在地址欄中看到這個)?您可能會看到緩存重定向?嘗試清除瀏覽器緩存。什麼是DirectoryIndex?例如。 'index.php'是否可用? 「我應該以某種方式屏蔽問號」 - 不,上述正則表達式中的問號使得前面的組是可選的,它不是_literal_問號。 – MrWhite

相關問題