2013-10-25 52 views
3

我想在我的網站URL重寫使得URL重寫,除去.PHP導致循環

  1. www.example.com/loginwww.example.com/login.php

  2. www.example.com/login/過點www.example.com/login.php

  3. 網站內部的頁面應遵循上述規則。即

    www.example.com/inner/inner2/somethingwww.example.com/inner/inner2/something/也應該指向

    www.example.com/inner /inner2/inner3/something.php

  4. www.example.com/login/anything,如果不存在應顯示404 (在我的情況下,它是造成環路)

我寫的規則是:

RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^(.*[^/])$ $1.php [L] 
    RewriteRule ^(.+)/$ $1.php [L] 

它工作正常,在上述情況下3但在第四它是造成循環。

另外我想顯示一個404,如果一個文件擴展名爲.php請求。

而且,如果我使用REQUEST_URI而不是REQUEST_FILENAME,則上述規則更改的行爲。兩者有什麼區別?

TIA

回答

2

試試這個規則PHP擴展隱藏:

# To externally redirect /dir/file.php to /dir/file 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.php[\s?] [NC] 
RewriteRule^/%1 [R=301,L,NE] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ /$1.php [L] 
+0

爲404處理,你可以使用:'的ErrorDocument 404/404.php'並顯示自定義頁面從'404.php' – anubhava

+0

謝謝,但是如何請求帶有.php擴展名的頁面時顯示404。 – krisk

+0

查看404處理的更新答案。 – anubhava