2011-12-07 39 views
0

我使用.htaccess來顯示我的404頁面,同時在瀏覽器中顯示請求的URL而不是實際的404 URL。要做到這一點,我有這行我.htaccess自定義404重寫+排除主目錄重寫

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /404.php [L] 

這工作不錯,每當我去一個不存在的文件(即blalba.php)。

問題是:當我嘗試去我的主站點dir(即http://example.com/)時,我看到了404頁面。當我直接進入我的索引文件(即http://example.com/index.php)時,一切正常。


我怎麼能修改.htaccess重定向我的主要目錄

因此,實際上,主要的目錄被排除在上面的重寫代碼之外。

答:

見下面回答並添加RewriteCond %{REQUEST_FILENAME} !-d解決了這個問題!

回答

1

我敢肯定,你只是忘了告訴Apache需要「默認」index.php如果沒有任何精確的網址。這裏是你怎麼做:

<IfModule dir_module> 
    DirectoryIndex index.html index.php 
</IfModule> 

其他回答約404

我前幾天有同樣的問題。很簡單:將錯誤文檔分配給404.php。無論什麼時候出現404,服務器都會進行內部重定向,以便它可以正確製作網頁。

因此,這裏是我的虛擬主機配置的樣本:

<VirtualHost *> 
    ServerName x.fr 
    ... 
    ErrorDocument 404 /404.php 
    # activate rewrite engine: 
    RewriteEngine On 

    # *IMMEDIATELY* treat 404 
    # if 404.php then stop immediately 
    RewriteRule /404.php - [QSA,L] 

    # From now on your can apply all your rules: 
    ... 
    ... 
    ... 
    # Sample of how I do a 404: 
    RewriteCond %{ENV:PATH_LOCAL} notfound 
    # "not found" 404 : 
    RewriteRule .* - [R=404,L] 
</VirtualHost> 

所有你應該能夠適當404「過濾」創建自己的RewriteRules。

希望這會有所幫助!

+0

不幸的是,我不是能夠得到它的工作就是我想要的。 'http:// example.com /'仍然顯示'404' - 由於我是一個帶htaccess的新手,我可能犯了一個錯誤,但我無法從重寫規則中「解析」主目錄。 – Andrej

+0

哈哈!我沒有正確閱讀你的問題!我已經添加了另一個答案 –

+1

在嘗試編輯答案之後,它仍然將「/」重定向到404.php,但是在嘗試了更多並添加了「RewriteCond%{REQUEST_FILENAME}!-d」之後,它現在可以運行:) – Andrej

1

以下規則重定向與受contact.html =引用錯誤頁

ErrorDocument 404 /contact.php 
    RewriteRule ^contact\.php$ /contact.html?subject=%{REQUEST_FILENAME} [L,R] 
+1

注意:在這個例子中,中間文件contact.php並不需要真正存在! –