2016-01-12 120 views
0

我在htaccess的有這樣的代碼的GET超全局:刪除的index.php從URL

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -l 

RewriteRule ^(.+)$ index.php/?url=$1 [QSA,L] 

而在PHP中,我抓住當前URL請求,並給它的控制器,所以如果有http://example.com/index.php?url=about - >這會給我關於控制器,所以它顯示關於頁面(MVC)

現在我的問題是,如何從每個頁面中刪除index.php?url。例如,我想訪問關於頁面,然後我需要它 - >http://example.com/about

你可以在htaccess中看到我用任何類型的($ 1)替換index.php /?url但它沒有'噸似乎工作,因爲當我要求這個網址:(示例)http://example.com/about我沒有找到對象!錯誤404.當我有http://example.com時,我得到了controller_home頁面。然而,當我鍵入http://example.com/home它也顯示錯誤404

如果我這樣做:http://example.com/?url=abouthttp://example.com/index.php?url=about它的工作原理髮現,因此該URL是沒有得到通過我猜htaccess的去除給我的關於控制...

可能是我的PHP代碼中的另一個錯誤或什麼?

請幫助我,因爲我一直在查看這個大約10個小時的錯誤,我沒有找到它爲什麼會這樣做,我的朋友有幾乎相同的代碼,它對他來說完美的作品。

我是一種新的PHP,所以它可能是簡單的bug ... 在此先感謝大家,幫助!

+0

首先通過將相同的垃圾(隨機)文本放在您的'.htaccess'之上,並在您訪問您的頁面時查看它是否生成500(內部服務器)錯誤,來驗證您的'.htaccess'是否已啓用在瀏覽器中? – anubhava

+0

是的,我做過,現在嘗試,它的工作原理。順便說一句,我的根是這樣的:https://gyazo.com/7678d71f467f2a14cd54b565354112de –

+0

在index.php之前放置一個斜槓:'RewriteRule ^(。+)$ /index.php/?url=$1 [QSA, L]',以確保索引文件來自根目錄。 – trincot

回答

2

(httpd.conf文件或apache2.conf)。我知道OP使用的.htaccess但萬一有這個問題看這個討論的其他人:

RewriteEngine On 

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f 
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-l 

RewriteRule ^/?(.+)$ index.php?url=$1 [QSA,L] 

首先,大概是要測試如果請求的字符串不匹配的目錄,不符合一個文件,和不符合符號鏈接 - 所以你需要添加一個「!」在RewriteCond標誌之前(否定條件)。堆疊的RewriteConds與隱式AND鏈接,因此檢查目錄,文件和符號鏈接沒有意義(給定的請求的字符串不會匹配所有這些條件)。其次,如果你在主apache配置文件(即/httpd.conf或apache2.conf)中執行此操作,%{DOCUMENT_ROOT}將是必需的。如果你在.htaccess文件中這樣做,這是沒有必要的。

三,當RewriteRule匹配時,它包含/。據推測,當你請求「website.com/about」時,你希望將「about」傳遞給index.php而不是「/ about」,所以「/?」將從$ 1中刪除第一個字符位置的/。我把這個問號放在問號上,因爲我認爲這是最好的做法,因爲從技術上講,你可以得到一個不以斜線開頭的HTTP請求(儘管這將違背標準,每個瀏覽器在開始時都包含斜線)。第四,你不應該把index.php放在RewriteRule中(所以它應該是「index.php?url = $ 1」,而不是「index.php /?url = $ 1」)。查詢字符串通過「?」與文件名分開不是「/?」。

+0

它的工作原理!非常感謝您花時間回答我的問題,甚至解釋它的工作原理!我非常感謝它:)現在我很清楚爲什麼它起初不起作用,謝謝。 –

+0

太好了,很高興幫助! – VKK

0

如果你如果你正在編輯的主要Apache的配置文件中使用.htaccess文件

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^/?(.+)$ index.php?url=$1 [QSA,L] 

試試這個

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -l 

RewriteRule ^(.*)$ http://%1/$1/ [R=301,L] 
RewriteRule ^((.*)+)$ index.php?url=$1 [QSA,L] 
+0

沒有工作。此外,感謝所有幫助 –

+0

的人我編輯了我的答案,請嘗試。 –

+0

我的朋友,你是一個傳奇!我可以請你解釋一下嗎?非常感謝! –