2011-12-14 96 views
0

,我有以下我.htaccess文件措辭:簡單重寫規則不工作,因爲它應該

Options -Indexes 

RewriteEngine on 
RewriteBase /properties/ 
RewriteRule ^view/([0-9]+)$ view.php?id=$1 [QSA] 

我想寫一個「漂亮」的網址像http://example.com/properties/view/1http://example.com/properties/view.php?id=1

RewriteRule正在將請求傳遞給我的view.php腳本,但它似乎沒有執行查詢字符串位。例如,如果我這樣做print_r($_SERVER)我看到以下內容:

Array 
(
    ... 
    [DOCUMENT_ROOT] => /Users/Martin/Sites/[removed]/ 
    ... 
    [SCRIPT_FILENAME] => /Users/Martin/Sites/[removed]/properties/view.php 
    [REQUEST_METHOD] => GET 
    [QUERY_STRING] => 
    [REQUEST_URI] => /properties/view/1 
    [SCRIPT_NAME] => /properties/view.php 
    [PATH_INFO] => /1 
    [PATH_TRANSLATED] => /Users/Martin/Sites/[removed]/1 
    [PHP_SELF] => /properties/view.php/1 
    ... 
) 

爲什麼QUERY_STRING空?爲什麼我不能通過$_GET['id']訪問「1」?

注意:顯然我已將[removed]標記放置在文件路徑中。

+0

的[重寫規則的QS(http://wiki.apache.org/httpd/RewriteQueryString)似乎是正確的。你不應該,但是可以嘗試`[NC,L,QSA]`然而。可能會顯示一個`REDIRECT_QUERY_STRING` env變量嗎?否則,你可能必須設置`RewriteLog`才能找到。 – mario 2011-12-14 18:16:21

+0

您確定沒有其他規則先運行? – 2011-12-14 18:17:53

+0

我已經用我的`.htaccess`文件的全部內容更新了OP。 – 2011-12-14 18:24:25

回答

0

它看起來並不像我的重寫規則正在工作。否則,我認爲下面的值將被轉換:

[REQUEST_URI] => /properties/view/1 
[PHP_SELF] => /properties/view.php/1 

如果重寫規則進行工作,你的PHP腳本將看到重寫的URI。

一些想法...

什麼是您的RewriteCond?這是匹配嗎?

我從來沒有嘗試過匹配部分路徑,而沒有嘗試至少使用。*從頭開始匹配。如果您嘗試以下其中一項,會怎麼樣?

RewriteRule ^/?properties/view/([0-9]+)$ /properties/view.php?id=$1 [NC,L] 
RewriteRule ^.*/view/([0-9]+)$ /properties/view.php?id=$1 [NC,L] 
0

您只能重寫,使用與view開頭的URL:

^view/([0-9]+)$ 

因爲^錨定到開始。

你可以將其更改爲例如:

^properties/view/([0-9]+)$