現在PHPを使ってサイトを作っています。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/11/12 04:10:08
  • 終了:--

回答(5件)

id:JULY No.1

JULY回答回数966ベストアンサー獲得回数2472005/10/29 12:35:25

ポイント24pt

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

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

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

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


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

よります。

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

id:black_kenchan

お世話になります。

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

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

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]

が出来ません。

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

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

2005/10/31 00:10:05
id:tarchan No.2

たーちゃん回答回数200ベストアンサー獲得回数22005/10/29 14:34:59

ポイント24pt

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の場合と同じく処理することができます。

id:black_kenchan

ありがとうござます。

PATH_INFOで試したのですが

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

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

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

2005/10/31 00:20:31
id:ito-yu No.3

ito-yu回答回数323ベストアンサー獲得回数142005/10/30 10:14:12

ポイント24pt

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

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

id:black_kenchan

ありがとうございます。

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

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

2005/10/31 00:28:55
id:ito-yu No.4

ito-yu回答回数323ベストアンサー獲得回数142005/10/31 10:48:50

ポイント24pt

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

<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

id:black_kenchan

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

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

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

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

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

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

を表示すると

http://test.com/test/b

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

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

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

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

2005/10/31 16:07:16
id:PaulYamamoto No.5

Paul回答回数113ベストアンサー獲得回数22005/11/13 04:19:21

ポイント24pt

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の回答どおり

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません