2012-11-16 26 views
0

我正在使用htaccess下面從URL中刪除.php但它不起作用。從URL中刪除擴展不起作用

http://www.me.com/index.php應該讀http://www.me.com/index

有什麼理由?

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

我看着這些例子太多,但沒有運氣:

1 - 2 - 3

+1

你誤解了這個用例。它會重寫**傳入的**網址。它不適應你的網頁。 (有一個mod_rewrite的解決方法來實現它,或者'mod_substitute'來替代你的頁面重寫,但是這兩個主題都是..) – mario

回答

1

我認爲你錯過了點 - 它並沒有改變/重寫URL - 它增加了.php到您請求的URL,因此當您請求http://www.example.com/index時,它會檢查請求的文件名不是目錄(!-d),然後檢查存在的有效PHP文件(-f)。然後重寫請求(不是URL)以請求index.php文件。

documentation for mod_rewrite這是描述

提供了一個基於規則的重寫引擎重寫的飛行

+0

評論和答案。有趣... –

+0

@JasonMcCreary我創建了評論 - 然後認爲...什麼 - 它可能會把它變成一個答案 - 可能對別人有幫助 - 評論已被刪除:-) – ManseUK

+0

當我尋找「刪除URL的延伸...」就像搜索引擎中的詞語,他們中的大多數人表示上述代碼正常工作以移除擴展html,php ......我想知道爲什麼它不適用於我。 – BentCoder

1

我用這個.htaccess

AddDefaultCharset utf-8 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule .* - [L] 

DirectoryIndex index.php 

RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)/([^/]+)?$ index\.php?page=$1&s=$2&o=$3 [L] 

RewriteRule ^([a-zA-Z0-9_-]{3,20})/([^/]+)?$ index\.php?page=$1&s=$2 [L] 

RewriteRule ^([a-zA-Z0-9_-]{3,20})/?$ index\.php?page=$1 [L] 

RewriteRule ^([a-zA-Z0-9_-]{3,20})?$ index\.php?page=$1 [L] 

ErrorDocument 404 /404 

一個重命名請求的URL三個參數

  • 月1日是第
  • 第二個是S
  • 3日爲鄰

這是爲了避免在我的網址?&的使用情況,然後我把我的網頁這樣

http://testsite/page/s/o 

如果你只是做print_r($_REQUEST)它會給你這個

Array(
page => page 
s => s 
o => o 
) 

爲了避免擴展,我的用戶以下機制

$file = $_REQUEST['page'] . ".php"; 
if (file_exists('inc/' . $file)) { 
    include('inc/' . $file); 
} 

希望它會爲你工作,以及