2011-10-12 23 views
0

問題:我不知道如何匹配我的表達式中的文字點,所以我可以重寫包含點的查詢字符串。首先我想是這樣的:不能匹配文字點與htaccess正則表達式

RewriteRule ^([\.\w]+)$ index.php?url=$1 [L] 

我有一個PHP腳本:

echo "url is: ".$_GET['url']; 

即應,在理論上,輸出任何東西,我在我的查詢寫。但對於只包含字母和點的任何查詢,我的腳本始終輸出:

url is: index.php 

我已經試過了表達式:

^(.+)$ 
^([.\w]+)$ 

,結果是一樣的。

所以問題是:我的表情是否錯誤或者這是否與服務器的配置有關?

+0

按預期的正則表達式的作品,它從一組一個或多個字符相匹配包含點,字母數字字符和字母。不管你要求的路徑是否總是得到'index.php'? – Lekensteyn

+0

是的,我用幾個在線工具檢查了正則表達式,它的工作原理。然而,我在兩個不同的web服務器上得到了相同的結果:不管查詢是什麼,php輸出'index.php'而不是它應該的。 – package

+0

你知道Apache在URL到達'RewriteRule'之前會從URL中取出任何查詢字符串嗎?請舉例說明您輸入的完整網址和期望的輸出。 – ridgerunner

回答

1

它看起來像有在應用規則之前,其被處理時,如果使用相匹配小於index.php(用於匹配xy..例如)的規則的另一個請求時,如預期的結果:xy。隨着更多放鬆規則,如.*.+,它會失敗。然而,x.*工作正常。

您可以添加其他條件忽略像index.php請求:

RewriteCond %{REQUEST_FILENAME} !index\.php$ 
RewriteRule ^(.+)$ index.php?url=$1 [L] 

這是測試/調試用:

<?php 
printf("url is: %s <br>\n", htmlspecialchars(filter_input(INPUT_GET, 'url'))); 
echo "<pre>",htmlentities(print_R($_SERVER, 1)); 
+0

謝謝,像一個魅力工作。 – package