2

.htaccess ファイルにルールを設定して、.php 拡張子を持つすべてのファイルに、拡張子をスラッシュだけに置き換えることでアクセスできるようにしようとしています (/foo/bar/サイレントに読み込まれます/foo/bar.php)。以前、私は this を見つけまし。これは、私が探しているもののようなものですが、変更/foo/bar.phpされるだけです/foo/bar(末尾のスラッシュがないことに注意してください)。

htaccessに関しては、私はほとんど完全に初心者であり、前のリンクのコードを約30分間微調整しても、大量の500 internal server errorsは何も生成されませんでした. とても簡単な修正だと思いますが、Googleも試行錯誤もまだ結果をもたらしていません.

誰かが前述の投稿 (以下にコピー) のコードを見て、/foo/bar/書き換えられるように変更でき/foo/bar.phpますか?

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

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

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

どうもありがとう!

4

2 に答える 2

2

以下のコメントによると、その目的は、/ foo/bar.phpのようなphpスクリプトを実際に実行する/foo/bar/のようなユーザーに表示されるURLを持つことです。さらに、一貫性を保つために、/ foo/bar.phpを直接ロードしようとするユーザーを/foo/bar/にリダイレクトすることをお勧めします。

#Redirect users loading /foo/bar.php to /foo/bar/
RewriteRule ^(.*)\.php$ $1/ [R]

#Rewrite /foo/bar/ (what the user sees) silently to /foo/bar.php
RewriteRule ^(.*)/$ $1.php [L]

最初の[R]ルールの最後にあるは、ユーザーが/ foo / bar /をロードするように、書き換えではなくリダイレ​​クトするように指定しています。2番目の$1ルールの最後にあるatは、括弧(スラッシュを終了する前のすべて)と一致し、最後に.phpを追加します。[L]評価を停止する手段RewriteRules

私の元の返信と同様に、置換文字列に先頭のスラッシュを使用するかどうかは、コンテキストによって異なります。これらのルールを使用すると、リダイレクトであるため、最初のルールの効果を確認できます。mydomain.comfoo/bar/リダイレクトがではなくに移動しようとする場合は 、各ルールmydomain.com/foo/bar/の前に先頭のスラッシュを追加します。$1

別の注意-あなたのphpスクリプトはクエリ文字列を期待していますか?もしそうなら、追加の微調整が必​​要かもしれません。

Apachemod_rewriteリファレンスに詳細があります。

于 2013-01-21T05:08:27.207 に答える
1

最終的に、次のコードを使用してこれを機能させました。これは、最初の発見と David Ravetti の助けを組み合わせたものです。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R,L,NC]
## To internally redirect /dir/foo to /dir/foo.php
RewriteRule ^(.*)/$ $1.php [L]
于 2013-01-21T15:13:29.407 に答える