12

Apache 2.2 と PHP 5 を使用して、.php拡張機能なしで PHP を実行する最良の方法は何ですか? たとえば、次のスクリプトがapp.phpあり、次のように呼び出すのが好きです。

http://example.com/app

.php私はまだファイルの拡張子を保持したいのですが、持っていないことに注意してくださいmod_rewriteindex.php必要なディレクトリが多すぎるため、どちらも使用したくありません。

これを私のに追加することで、1つの方法を見つけました.htaccess

AddHandler server-parsed .php
SetHandler application/x-httpd-php
AddHandler application/x-httpd-php .php

これを使用すると、ページの実行が少し遅くなります。すべての PHP ページで SSI を呼び出すと思われます。これを達成するためのより良い方法があるかどうか疑問に思います。

4

3 に答える 3

25

別の方法は、コンテンツ ネゴシエーションを使用することです。マルチビューをオンにします:

Options +MultiViews

名前付きリソースが存在しない場合、Apache はファイルをグロブし、ブラウザから送信されたメディア タイプとコンテンツ エンコーディング要件に基づいて並べ替えます。ファイル (PHP スクリプト) が 1 つしかない場合、それが URL の解決先になります。

于 2010-03-01T19:12:31.150 に答える
7

の特定のファイルの MIME タイプを強制することもできます.htaccess

<Files app>
ForceType application/x-httpd-php
</Files>
于 2010-03-01T22:10:14.080 に答える
-1

簡単に言えば、これを思い通りに行うことはできないということです。PHP では、ファイルを実行するためにいくつかの拡張子が必要になるため、*.php のままにしておくこともできます。

mod_rewrite を使用しない限り、完全なファイルと拡張子を使用してファイルを呼び出す必要があります。

これが mod_rewrite の優れた点です。まさにそのようなことが可能になります。

なぜ mod_rewrite を使えないのですか? 環境の問題ですか、選択ですか、Lighttpd (lighty) を使用していますか?

拡大

サーバーが mod_rewrite をサポートしていない場合に爆発しないように、書き換えルールを次のようにラップします。

<IfModule mod_rewrite.c>
// DO REWREITE HERE
</IfModule>

それがセキュリティ上の懸念または同等に有効であると思われる場合は、次のチェックを行い、カスタム 404 またはドキュメントに送信して、mod_rewrite を有効にする方法の例を提供し、必要性を説明することもできます。 check はオプションですが、これを使用しない場合、ユーザーには単に .php 拡張子が表示されますが、ページは引き続き動作するはずです。

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /application/errors/404.php
    // ERROR 404 ABOVE OR DO ANOTHER DIRECT REDIRECT TO AN INFORMATION PAGE
</IfModule>
于 2010-03-01T18:52:16.413 に答える