人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

現在PHPを使ってサイトを作っています。
URLの事で分からない事があるので質問させてもらいます。
例)http://test.com/test/test.php?a=b をhttp://test.com/test/a/ の様にURLをHTML方式で表示したいのですが、うまくいきません。
例えば「htaccess」を使って、スラッシュ「/」で区切る事は出来るのですが、http://test.com/test/a や http://test.com/test/a/index.html などでアクセスするとエラーになります。
本当のフォルダみたいにスラッシュ「/」が無くてもindex.htmlを入力してもうまく表示する方法はありませんか?

●質問者: black_kenchan
●カテゴリ:コンピュータ
✍キーワード:HTML INDEX PHP URL アクセス
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● JULY
●24ポイント

http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html.ja.jis

Apache module mod_rewrite

お使いの Web サーバが Apache だと仮定して(PHP を使っている、といっても、

IIS でも PHP は動くし)、こういった URL の書き換えを行う mod_rewrite

を使えば可能です。意図的にはずしていないか、古い Apache で無いかぎり、

このモジュールが使えるようになっていると思います。


ただ、.htaccess でこの設定が有効に使えるかは、Web サーバ自体の設定にも

よります。

http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html

mod_rewrite

ここに、設定例つきの解説があります。

◎質問者からの返答

お世話になります。

ご紹介頂いたページ拝見いたしました。

色々試してみたのですが、

RewriteRule ^/cgi-bin/sample/([0-9A-Za-z]+)/([0-9A-Za-z)]+)¥.html$ /cgi-bin/sample/sample¥.cgi?a=$1&b=$2 [L]

は、出来るのですが

RewriteRule ^/abc/(.*)¥.html$ /new/$1¥.html [R=301,L]

が出来ません。

設定などは問題ないと思うのですが、まだ分かりません。

もし、ご存知でしたら具体的に記述方法など教えて下さい。


2 ● たーちゃん
●24ポイント

http://wiki.nothing.sh/page/memo/PukiWiki%20with%20PATH_INFO

memo/PukiWiki with PATH_INFO - wiki@nothing

定義済変数のPATH_INFOを使って実現します。

http://test.com/test/test.phpが存在する場合、URLがhttp://test.com/test/test/a/b/cのときPATH_INFOには/a/b/cが入ります。あとは?a=bの場合と同じく処理することができます。

◎質問者からの返答

ありがとうござます。

PATH_INFOで試したのですが

?http://test.com/test/test/a

で表示されるのですが、知識があまりないのでうまく表現する事が出来ないのですが、?に来たら

http://test.com/test/a/になるようにしたいのですが出来ませんでした。


3 ● ito-yu
●24ポイント

http://www.google.co.jp/search?q=mod_rewrite

それはPHP的な領域ではなくapache(あるいは他のhttpサーバ)設定の領域です。

apacheならば、たとえばmod_rewriteモジュールを使うとリクエストが来たときにユーザエージェント側にわからないようにURLを書き換えることが出来ます。

◎質問者からの返答

ありがとうございます。

サーバーの知識が余り無く、しかもレンタルサーバーなので、色々試すのが難しい状態です。

なにか他に方法は無いでしょうか。


4 ● ito-yu
●24ポイント

http://www.net-newbie.com/trans/mod_rewrite.html

Apache module mod_rewrite

では汎用的な書き方を一つ。

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ q.php?q=$1 [L]

</IfModule>


!-f でリクエストされたファイルが存在しない場合、!-d でリクエストされたディレクトリが存在しない場合、と条件を指定して、最後にPATH情報をq.phpに$_GET[’q’]でアクセスできる形で渡しています。


q.phpの中で、$_GET[’q’]を取得して、/でexplodeしたりして目的のパラメータを抽出して、出力する内容を振り分けます。

http://jp.php.net/reserved.variables

PHP: 定義済の変数 - Manual

あまり汎用的でない、ご希望のルールの書き方。

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteRule test/([a-z0-9]+)/([a-z0-9]+)(/(.*))?$ test/test.php?$1=$2&q=$4

</IfModule>


test.phpは以下の内容で確認:

<?php

echo htmlspecialchars($_SERVER[’QUERY_STRING’]);

?>


/index.htmlが付いたり付かなかったり、ということなので追加パラメータとして適当に付加しています。


http://test.com/test/a/bhttp://test.com/test/test.php?a=b


http://test.com/test/a/b/index.htmlhttp://test.com/test/test.php?a=b&q=index.html

◎質問者からの返答

またまた、本当にありがとうございます。

汎用的な方も汎用的でない方も試させて頂きました。

一応、出来るのですがまだ目的どおりに出来ません。

本当に説明が下手ですいません。

汎用的な方の手法で、例えば

http://test.com/test/test.php?a=b

を表示すると

http://test.com/test/b

と表示できました。このURLに来たものを

http://test.com/test/b/

のURLになるようにしたいのですが、まだ出来ません。

後、ファイルが存在しない場合の戻り先も指定できるのでしょうか?


5 ● Paul
●24ポイント

http://httpd.apache.org/docs/2.1/ja/handler.html

Apache ?Υ??????λ??? - Apache HTTP ??????

そのサーバーに/test/a/index.html というファイル(空ファイルで可)が作れるのならば、

/test/a の .htaccess に

Action test-php /test/test-php

AddHandler test-php .html


で、OKです。


あとは2の回答どおりPHPでPATH_INFO

を利用して・・・

と書けばOKです。


あとは2の回答どおり

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ