2012-03-16 52 views
1

我遇到了使用.htaccess文件重寫我的網址時沒有.php文件的問題。它適用於某些地址,但不適用於其他地址。以下是在我的.htaccess文件..某些網址在使用.htaccess從網址中刪除.php時無法正常工作

RewriteEngine On 

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

#rewrite url up to 3 levels 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ /$1/ [R=301,L] 

我有我的網站上的以下文件夾/文件結構..

index.php 
about-us 
    index.php 
    careers.php 
our-work 
    index.php 
    test.php 
    client1 
    example.php 

以下URL工作..

example.com

example.com/about-us

example.com/our-work

example.com/our-work/client1/example

但這些不工作..

example.com/our-work/test

example.com/about-us/careers

我剛剛得到一個404錯誤。

任何想法爲什麼會發生這種情況?

回答

1

您沒有2級規則,只有1級和3級規則。您應該添加:

#rewrite url to 2 levels 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php 

你或許應該用的RewriteCond條件也前綴你的3級規則:

#rewrite url to 3 levels 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /$1/$2/$3.php 

這將阻止規則被調用,如果有相同名稱或目錄PHP文件不存在。

+0

太棒了!完美的作品..謝謝! – Dustin 2012-03-16 13:34:49