2012-03-16 13 views
1

.htaccessファイルを使用してURLを.phpなしで書き直す際に問題が発生します。一部のアドレスでは動作しますが、他のアドレスでは動作しません。ここで.htaccessを使用してURLから.phpを削除すると一部のURLが機能しない

..次のURLは機能し

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

..私は私のサイトの次のフォルダ/ファイル構造を持っている...私の.htaccessファイルにあるもの

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] 

です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

関連する問題