2011-06-21 13 views
0
RewriteEngine on 
RewriteCond %{http_HOST} ^domain.com [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301] 

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

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

最初のルールは正しく動作しているため、ブラウザを正しくリダイレ​​クトしています。しかし、訪問者がdomain.com/services.phpの代わりにdomain.com/servicesに行くことができるように、.phpを取り除くべき第2のルールは機能していません。最後に/を付ける第3の条件は働く。mod_rewrite .phpが機能しない。

ストリッピングの.phpは私に404エラー与え理由を任意のアイデア:

The requested URL /s/p/domain.com/public/packing-tips.php was not found on this server? 

何かアドバイスを?

+0

あなたが直接(エンドでの.phpで)URLを行く場合: - それは私のために正常に動作しますが、特定の状況であってもよいですか?たとえば、domain.com/services.phpまたはdomain.com/packing-tips.phpにアクセスして404を取得した場合は、 –

+0

いいえ、404は表示されません。ページは正確に表示されます。ただし、アドレスバーから手動で.phpを削除すると、上記のエラーが表示されます。 – brianrhea

答えて

0

は、この親愛を試してみてください。

RewriteRule ^([^/]+)/$1 

希望がお手伝いします。

0

この行を削除してみて、もう一度確認してください:

RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php 
0

この.htaccessのコード拡張子.phpの使用を除去するために:

Options +FollowSymlinks -MultiViews 
RewriteEngine on 

RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC] 
RewriteRule ^(.+)\.php$ /$1 [NE,R=301,L,NC] 

RewriteCond %{REQUEST_URI} !\.php$ [NC] 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)/?$ /$1.php [L] 
+0

domain.com/sizes-and-pricing.phpに行くと正しく表示されます。 .phpを削除すると、次のエラーが表示されます。 要求されたURL /sizes-and-pricing/.phpがこのサーバー上に見つかりませんでした。 – brianrhea

+0

@samseaborn:あなたが遭遇した後続のスラッシュ '/'の問題を処理するために私の答えを少し変更しました。もう一度お試しください。 – anubhava

0
RewriteEngine on 
# force canonical name 
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,QSA] 

# Add .php to requested resource (if such php file does exist) 
# e.g. www.example.com/services/ => www.example.com/services.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.+)/$ /$1.php [QSA,L] 

# Force trailing slash to be present (only if such file does not exist) 
# e.g. www.example.com/services => www.example.com/services/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*[^/])$ /$1/ [R=301,QSA] 

あなたはこのURL domain.com/servicesを要求した場合、それは意志そのようなファイル/フォルダが存在しない場合はdomain.com/services/にリダイレクトされます。次に、(ONの場合)が存在する場合は、に書き換えられます。そのようなPHPファイルがない場合は、404エラーが表示されます。

理論上、これらの行を「強制的な正規名」ルールの後に追加すると、後ほど少数のRewriteCondルールを取り除くことができます(書き換えルールがかなりある場合に便利です)が、サイトでこれを確認する必要がありますそれはあなたのWebページを表示しない、

# Do not do anything for already existing files 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ - [L] 
関連する問題