2012-12-21 126 views
0

因爲某些原因,當我在文件名後面加上「.php」,並且在「facebox」表單中加載完全。但檢查一下。.htaccess php重定向

的.htaccess:

RewriteEngine On 
RewriteRule ^media/([0-9]+).*/?$ media/report.php?id=$1 [L,QSA] 

我的PHP代碼:

<a style="float: right;padding-right: 15px;" href="media/report/<?php echo $row['id'] ?>" rel="facebox"><img src="_lib/images/notice.png"></a> 
如果想看現場觀看

,檢查出http://www.krissales.me/#/media/39.Article-Testing

,並在文章評論中打報告圖標圖像。出於某種原因,它會加載facebox,但它不會加載表單處理程序。

但是,如果我在報告之後添加一個.php以及ID的標記,並且取消.htaccess,它會很好地工作。但我正在嘗試清理URLS。

你會碰巧知道我做錯了什麼嗎?

+3

爲什麼你的網址中有'#'?如果我刪除,我似乎得到您的測試輸出。 Firefox似乎在請求中發送它,但我不會指望所有瀏覽器都這麼做,因爲它表示錨點,並不需要發送。仔細檢查後,你的RewriteRule也不會考慮'#'。 – Sammitch

+0

那又如何?我想在重寫規則中添加#符號嗎? – TrippedStackers

+2

重寫規則*不能*代表'#'。它和它後面的所有內容都是*片段標識符*,並且我不知道在瀏覽器中包含它。我很確定它甚至不符合RFC的要求。到URL看起來像'/'的服務器。 – cHao

回答

3

嘗試:

RewriteEngine On 
RewriteRule ^media/report/([0-9]+)(/)?$ media/report.php?id=$1 [L,QSA] 

[0-9]+部分代表一個數量級以上中,支架()在您的情況匹配的值返回到一個變量,$1

UPDATE如上所述,#之後的所有內容都是Javascript業務。 Apache Web服務器處理#標誌前的所有內容。

+0

不行,沒有工作。你認爲它與core.js文件有關?我確實使用了一個散列標籤類型的平臺。 – TrippedStackers

+0

您是否嘗試直接導航到頁面? –

-1

嘗試:

RewriteRule ^#/media/([0-9]+).*/?$ media/report.php?id=$1 [L,QSA] 

因爲你的怪異hashmark的東西。

它也可以簡化爲:

RewriteRule ^#/media/([0-9]+).*$ media/report.php?id=$1 [L,QSA] 

既然你似乎不關心下面的ID號什麼。

+0

祝您好運,讓服務器甚至可以查看散列URL。那些只能在客戶端工作;瀏覽器會在發送GET請求到服務器時去掉散列標記(以及後面的所有內容)。 – cHao

+0

@cHao Firefox不會剝離。我自己檢查了這個請求。它可能*應該*,我會打賭其他瀏覽器*將*。在這個網站後面也可能有一大堆JS來做神知道的事情,所以我們並不真正知道apache會收到什麼請求。 – Sammitch

+0

「...片段標識符不用於URI的方案特定處理;相反,在取消引用之前,片段標識符與URI的其餘部分分開,因此片段本身內的標識信息僅由用戶代理引用,而與URI方案無關。「(RFC3986,§3.5)它*絕對*應該剝離它們。 – cHao