2011-03-11 71 views
1

我有幾個文件命名爲「index.php?page = 1」,「news?id = 1」。我怎樣才能設置Apache發送確切的這些文件與像「http://site.com/index.php?page=1」,「http://site.com/news?id=1」等查詢 我試過.htaccess規則使apache2服務與查詢字符串像名稱的文件

RewriteRule ^(.*)$ $1 [L,QSA] 

它不起作用。

回答

1

您必須在用於請求的URL中編碼特殊字符?=


例如,如果你的文件名爲strange.php?plop=1,那麼,您的網址必須是:

http://tests/temp/strange.php%3Fplop%3D1 

在PHP中,這可以通過使用urlencode()函數來完成。註釋後



編輯:在這種情況下(這是真的不好......),一個解決辦法可能是使用像這樣的重寫規則:

RewriteRule .* temp.php 

這將重定向所有內容temp.php

在那裏,您可能可以使用$_SERVER中的某些內容來查找請求。


例如,如果我把這個網址:

http://tests/temp/strange.php?plop=1 

而且在使用的代碼這一部分我temp.php

var_dump($_SERVER); 

我得到這樣的輸出:

array 
    ... 
    'SERVER_NAME' => string 'tests' (length=5) 
    'SERVER_ADDR' => string '127.0.0.1' (length=9) 
    'SERVER_PORT' => string '80' (length=2) 
    ... 
    'REDIRECT_QUERY_STRING' => string 'plop=1' (length=6) 
    'REDIRECT_URL' => string '/temp/strange.php' (length=17) 
    ... 
    'QUERY_STRING' => string 'plop=1' (length=6) 
    'REQUEST_URI' => string '/temp/strange.php?plop=1' (length=24) 
    'SCRIPT_NAME' => string '/temp/temp.php' (length=14) 
    ... 

所以,在這裏,我想我可以重新建立文件名,使用$_SERVER['REQUEST_URI']

+0

我不能這樣做,因爲所有鏈接已經生成。 – Molfar 2011-03-11 18:13:12

+0

@Molfar:哦,太糟糕了。我已經編輯了一些額外的信息我的答案;希望這可以幫助 ! – 2011-03-11 18:21:59