web-dev-qa-db-ja.com

URLに.php拡張子を付けずにPHP Webページを実行する方法は?

Noobの質問で申し訳ありませんが、何を検索すればよいかわかりません。

そのページでサイトを作っていますproduct.php?id=777
product/777にしたい

ありがとうございました!

18
Tuco

Webルートに.htaccessファイルを作成し、そこに次のように入力します。

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^product/([0-9]+)$ product.php?id=$1
21
arma

Mod_rewriteを使用する代わりに、.htaccessで次を使用することもできます。

 DefaultType application/x-httpd-php 

そして、サーバー上でスクリプトにproductという名前を付けるだけです(.phpファイル拡張子なし)。

したがって、直接呼び出すことができ、追加された文字列を$_SERVER["PATH_INFO"]として受け取ります。

14
mario

Mod_rewriteを使用したくない場合(私は使用しませんでした)、他の回答は機能しないようでした(私にとっては機能しませんでした)。次に、Apache2.4以降で実行している場合にこれを試してみてください。

より安全でないバージョン:拡張子のないものをPHPファイルとして実行します(私の実装のように、サーバー全体に1つのファイルしかない場合、これはそれほど悪くはありませんが、それでも誰かがそのディレクトリにファイルを書き込むことができた場合は、任意の実行を開いたままにしておきます...そして、ファイルを書き込むことができれば、PHP拡張子を付けることができるので、実際にはそうではありませんこれが本当にあなたの露出を広げるかどうか確かめてください。)

<FilesMatch "^[^.]+$">
    ForceType application/x-httpd-php
</FilesMatch>

これをディレクトリの.htaccessファイルに入れるか(有効にしている場合)、ホスト定義の一部に直接入れます。

より具体的に(そしておそらくより安全に)したい場合は、正規表現をより具体的なものに置き換えることができます。

<FilesMatch "^MySingleFileWithNoExension$">
    ForceType application/x-httpd-php
</FilesMatch>

次に、Apacheを再起動するだけで、準備完了です。

5

私にとってこのコードは機能します:

"/ etc/Apache2/sites-available/default"または "httpd.conf"

デフォルトのディレクトリに(少なくとも)これらのオプションが必要です

...
    <Directory />
        ...
        Options FollowSymLinks
        AllowOverride All
        ...
    </Directory>
...

またはサイト固有のサイトディレクトリ

...
    <Directory "/var/www/my-site">
        ...
        Options FollowSymLinks
        AllowOverride All
        ...
    </Directory>
...

作成するか(存在しない可能性があります。Apacheで読み取り可能であることを確認してください)、サイトのディレクトリ(たとえば、「/ var/www/my-site /」)の「。htaccess」を編集します。 htaccess ")そしてこのコードを追加します:

AddType application/x-httpd-php htm html php
AddHandler application/x-httpd-php .htm .html

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
1

これは、CodeIgniterやZendのようなフレームワークが簡単に実現できるものですが、他の人が示唆しているように、Apacheのmod_rewriteだけで実現できます。基本的に、次のような.htaccessを使用して、すべてのトラフィックを1つのページに転送します。

<IfModule mod_rewrite.c>
    RewriteEngine On

        RewriteCond                     %{REQUEST_FILENAME} !-f
        RewriteCond                     %{REQUEST_FILENAME} !-d
    RewriteRule                 ^(.*)$ index.php?_url=$1 [QSA,L]
</IfModule>

そのページにアクセスしたら、その_url変数を解析して、任意の形式にすることができ、要求を適切に処理できます。

1
Jimmy Sawczuk

私はこれを何年もの間、「Support」という名前のファイルを実行するために以下を使用して実行しました(Support.phpではなく、ファイルにアクセスするための2つの方法は必要ありませんでした)。

<Files Support>
    SetHandler php-script
</Files>

ただし、Pleskを使用してスクリプトをPHP 7.0として実行すると、これに問題が発生し始めました。ルート(.com/index.php)はPHP 7は問題ありませんが、私のphpスクリプトファイル(.com/Support)はすべてPleskのデフォルトのバージョンとして実行されますPHP 5.4。なぜそれが行われるのかまだわかりませんただし、デフォルトのハンドラーを設定する際の問題は回避できます。

0
JBH