2012-07-27 32 views
0

當我請求我的網站時,我試圖向URL添加尾部斜線,然後使用mod_rewrite將其作爲參數傳遞給index.php。mod_rewrite添加尾部斜線並傳遞給index.php

的.htaccess文件看起來像這樣:

RewriteEngine On  

#Add trailing slash 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ /$1/ [R] 

#Pass to index.php 
RewriteRule ^(.*)/$ index.php?p=$1 

在我的index.php文件只輸出參數:

<?php echo $_GET["p"]; ?> 

但是當我輸入的地址欄中除了http://mydomain.com/,例如http://mydomain.com/contactphp始終輸出http://mydomain.com/index.php。所以http://mydomain.com/index.php在某種程度上作爲參數,而不是請求的頁面,如contact過去了,但我不知道爲什麼......

此外,當我編輯

RewriteRule ^(.*)/$ index.php?p=$1 

RewriteRule ^(.*)/$ /index.php?p=$1 

和我鍵入網址例如mydomain.com/contact Apache給我302找到並找到它被移動到的位置的鏈接,但它鏈接到同一頁面...

任何想法?

謝謝。

回答

1

對於這個問題,Apache有很長的篇幅。

尾隨斜線問題

每一個網站管理員可以唱有關的URL引用目錄後綴斜槓的問題首歌。如果它們丟失了,服務器會拋出一個錯誤,因爲如果你說/〜quux/foo而不是/〜quux/foo /,那麼服務器搜索一個名爲foo的文件。並且因爲這個文件是一個它抱怨的目錄。實際上,它試圖在大多數情況下解決它自己,但有時候這種機制需要你模擬。舉例來說,你已經做了很多複雜的URL的重寫後的CGI腳本等 解決方案:

這個微妙問題的方案是讓服務器自動添加後綴斜槓。爲了正確地做到這一點,我們必須使用外部重定向,以便瀏覽器正確地請求後續圖像等。如果我們只進行了內部重寫,這隻適用於目錄頁面,但是當任何圖像包含在此頁面時會出錯與相對URL,因爲瀏覽器會請求一個內聯對象。例如,在/ ~quux/foo/index.html中對image.gif的請求將變爲/ ~quux/image.gif,而無需外部重定向!

So, to do this trick we write: 

RewriteEngine on 
RewriteBase /~quux/ 
RewriteRule ^foo$ foo/ [R] 

瘋狂和懶惰甚至可以在其homedir的頂級.htaccess文件中執行以下操作。但請注意,這會造成一些處理開銷。

RewriteEngine on 
RewriteBase /~quux/ 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.+[^/])$   $1/ [R] 

它可以在這裏找到:

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

+1

「如果尾隨斜槓]丟失,服務器轉儲錯誤:」你說的肯定是Windows服務器,因爲Linux下這兩種情況下是相同的:'cd/home' =='cd/home /'(對於URL也是一樣的) – feeela 2012-07-27 14:19:26

+0

我用'DirectorySlash Off'指令關閉了自動shash添加,但是重寫仍然不起作用。 。 – longaster 2012-07-27 14:26:56