1

URLをきれいにしたい。

example.com/en/directions.php

example.com/en/directions/

両方とも書き直す必要があります

example.com/en/directions

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php
</IfModule>

これは現在500エラーを生成しexample.com/en/directions/、.phpに。を残しexample.com/en/directions.phpます。

書き換え条件と書き換えルールのしくみを理解していただければボーナスポイント。これらの条件のいずれかが一致する場合、これを実行しますか。そして、-d-fはどうですか、彼らは何をしていますか?

4

1 に答える 1

0

末尾のスラッシュが原因でチェック-fが失敗するため、末尾のスラッシュを使用せずに追加のチェックを行う必要があります。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ^(.*?)/?$
    RewriteCond %{DOCUMENT_ROOT}/%1.php -f
    RewriteRule ^(.*?)/?$ $1.php
</IfModule>

書き換え条件と書き換えルールのしくみ。これらの条件のいずれかが一致する場合、それは続きますか?そして、-dと-fはどうですか、彼らは何をしていますか?

ルールの前にある任意の数の条件はそのルールにのみ適用され、それらはすべて一致する必要があります。ある条件または別の条件が必要な場合[OR]は、条件の最後にフラグを含めることができます。

    RewriteCond %{REQUEST_FILENAME} !-d [OR]
    RewriteCond %{REQUEST_FILENAME} !-f

-fおよび-dは、指定されたパスがファイルまたはディレクトリを指しているかどうかを確認するためのリソースチェックです。完全な説明については、 apacheのmod_rewriteドキュメントを参照してください。

于 2012-08-23T18:58:12.980 に答える