2012-03-30 120 views
1

我寫了一個URL重寫規則的URL重定向等作爲

http://picselbocs.com/projects/helsinki-map-application/{something} to 
http://picselbocs.com/projects/helsinki-map-application/index3.php?pcode={something}. 

在我檢查,如果$_GET['pcode']變量是index3.php文件的頭設置,我的目標是,如果變量未設置(即試圖訪問http://picselbocs.com/projects/helsinki-map-application/時),重定向到以下地址:http://picselbocs.com/projects/helsinki-map-application/D02081460

不幸的是,重定向不會發生。這意味着如果該{something}值是空的,我不重定向到http://picselbocs.com/projects/helsinki-map-application/D02081460

php文件中的代碼是:

if (!isset($_GET['pcode'])) { 
    header('Location: ./D02081460');  
    exit(); 
} 

而且.htaccess文件上寫着:

RewriteEngine On 
RewriteRule ^([A-Za-z0-9]+)?$ index3.php?pcode=$1 [NC,L] 

任何人都可以告訴我我做錯了什麼?

在此先感謝!

+0

'(+)'可以(也應該)與''代替?(*)。試試看。 – 2012-03-30 16:20:38

+0

重定向規則是否真的有效?你有沒有檢查你的Apache日誌,看看GET參數實際上是否被傳遞? – 2012-03-30 16:20:52

+0

該規則按預期工作,除非傳遞GET變量,是的。 @Truth我已經取代了「+」,但仍然沒有伎倆... – 2012-03-30 16:29:51

回答

4

目前,pcode將始終設置,它可能只是空的,因爲規則總是會通過,所以你會得到index3.php?pcode = {something},但{something}可能等於''。

因此,要麼:

RewriteEngine On 
RewriteRule ^([A-Za-z0-9]+)/?$ index3.php?pcode=$1 [NC,L] 
RewriteRule ^.*     index3.php    [NC,L] 

添加失效切換,使組貪婪,使其如果不經過失敗。或者你的支票更改爲:

if ($_GET['pcode'] == '') { 
    header('Location: ./D02081460');  
    exit; 
} 

希望這有助於

ISE

+0

謝謝,是!我已經對重寫規則進行了更改,並且做到了這一點。謝謝! – 2012-03-30 16:33:10

+0

順便說一句,我怎麼能稍微改變規則,所以URL將以問號開始?例如http://picselbocs.com/projects/helsinki-map-application/?D02081460?我已經嘗試了2個小時,但無法使其工作 – 2012-03-30 16:35:46

+0

嘗試轉義問號,因爲它是一個特殊字符,並且在正則表達式中有函數。你的小組可以是:^(\?+ [A-Za-z0-9] +)/?$。那工作? – ise 2012-03-30 16:41:11