URLの加工で悩んでいます。


現在、PHPでサイトを制作していましています。

URLをHTML表示にしようと思い、htaccessを下記のように記述して試しています。


RedirectMatch 301 ^([^.]*[^/])$ $0/
RewriteEngine on
RewriteRule ^([0-9A-Za-z)]+)¥/$ test.php?hensu=$1 [L]

問題というのが、上記の設定だと「 http://test.com/$1/」という形で表示できるのですが、

同一フォルダ内のフォルダがエラーとなって見れなくなってしまいます。

http://test.com/abc/

上記のabcというフォルダがあるのですが、abcを変数と読まれて悩んでいます。

うまく説明できないのですが、分かる方回答お願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:kimizu No.1

回答回数726ベストアンサー獲得回数21

すみません。何度か質問を読んだのですが、

理解できませんでした。


「具体的に、XXXというアクセスがあったら、

YYYにアクセスさせたい」という書き方のほうが

解りやすそうです。

http://www.hatena.ne.jp/1125239943

人力検索はてな - <mod_rewriteの書き方> 例えば、http://www.AAA.com/ にアクセスした際に http://AAA.com (wwwなし)にリダイレクトするように mod_rewrite を使って設定するには、具体的..

過去にこんな質問が出ていたみたいです。

こちらも参考にどうぞ。

id:black_kenchan

すいません。質問が分かりにくかったですね。。

例えば、 http://test.com の中に

test.php と info というディレクトリがあるとして、

infoにアクセスするとしたら、

http://test.com/info/

でアクセスしますよね。

それで、test.phpをhtaccessを使ってHTML形式の/区切りで表示させるようにした場合、

http://test.com/×××/

という形になります。

そうすると、infoのディレクトリもスラッシュで区切られている為、 infoの部分が変数とみなされてしまい、

通常のinfoのトップが表示されなくなってしまうので、それを何とかしたいという感じです。

説明がうまく書けなくてすいません。

2006/02/07 22:05:10
id:esecua No.2

回答回数510ベストアンサー獲得回数10

.htaccessでhttp://test.com/XXX/のXXX/はフォルダ指定ではなく引数読み込みのみだと指定してますので、いくらabcというフォルダにアクセスしたくともhttp://test.com/abc/ではアクセスできない形になっているかと思います。

id:black_kenchan

こういう場合は、無理なのでしょうか・・・

2006/02/07 23:02:53
id:tezcello No.3

回答回数460ベストアンサー獲得回数69

http://www.sixapart.jp/movabletype/manual/mt31.html

Movable Type 3.2 マニュアル - Movable Type 3.1 の新機能

RewriteCond と組合わせると良いようです。

ディレクトリに対するアクセスは何もしない

ファイルへのアクセス(とみなされる)ものはルールで置き換えるという具合に。

具体的には、

RedirectMatch 301 ^([^.]*[^/])$ $0/

RewriteEngine on


RewriteCond %{REQUEST_FILENAME} !-d


RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([0-9A-Za-z)]+)¥/$ test.php?hensu=$1 [L]


こんな感じです。

とりあえず家のイントラサーバでは上手くいきましたよ。

他にも色々出来るみたいです。

(まだ理解できていませんが)

id:black_kenchan

一応試しましたが、やはりうまく出来ませんでした。

2006/02/08 01:40:13
id:tezcello No.4

回答回数460ベストアンサー獲得回数69

ポイント200pt

おかしいですね?こちらでは上手くいっているのに。

apache のバージョンの所為でしょうか。


もしも test.php がルートに無い場合はフルパスで書くなり、RewriteBase が必要ですが、大丈夫ですか?

あと、質問文をコピペしたんですけど、) を名前として許すとは思いにくいので

RewriteRule ^([0-9A-Za-z)]+)¥/$ test.php?hensu=$1 [L] は

RewriteRule ^([0-9A-Za-z]+)¥/$ test.php?hensu=$1 [L] ですね。

id:black_kenchan

ありがとうございます。

出来ました。

質問に書かなかったのですが、

DirectoryIndex

を使用していてDirectoryIndexよりも前に記述したら出来ました。

本当に有難う御座いました。

また、機会があったら宜しくお願いします。

2006/02/08 13:51:03

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

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

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

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

回答リクエストを送信したユーザーはいません