いろいろ、参考書やネット検索で見ますが、リダイレクトしてくれません><
http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
のURLを
http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93
このように変えたいと思っています。
上記の場合.htaccessの中身は
AddHandler x-httpd-php5 .php .phps
RewriteEngine on
RewriteRule ^/worddetail/(.*)$ /worddetail.php?tag=$1
ではおかしいでしょうか?
『AddHandler x-httpd-php5 .php .phps』はサーバーでPHP4とPHP5が選択でき、PHP5を選択した際ドキュメントディレクトリに自動で.htaccessも作成されました。
その.htaccessに、
RewriteEngine on
RewriteRule ^/worddetail/(.*)$ /worddetail.php?tag=$1
を自分で追加したのですが・・・。
500や403エラーは出ないのですが、URLはちっとも変化しません。
Xサーバーを使っています。
よろしくお願いします。
これではどうでしょう。
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^worddetail/(.*)$ worddetail.php?tag=$1
例えば、
・わざと間違った記述をする -> 500エラーが返るはず
・単純な書換えを用意してチャンと機能するか
例えば
$_GET の内容を表示するだけの test.php を作っておいて、
RewriteRule ^abc$ /test.php?tag=123 を記述しておいて
http://www.hoge.com/test でアクセスする -> 404エラーが返るはず
http://www.hoge.com/abc でアクセスする
それと質問です。
> 500や403エラーは出ないのですが、URLはちっとも変化しません。
http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93
でアクセスした時にエラーが出ない代りに何が表示されるのでしょうか?
早速ご報告します。
> わざと間違った記述をする -> 500エラーが返るはず
改行タグを間違うとか、文法にない記述をしますと、500エラーが帰ってきます。
それに、PHP5にしかない関数を使い、これが機能していますので.htaccessは機能しています。
> http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93
> でアクセスした時にエラーが出ない代りに何が表示されるのでしょうか?
これが不思議と、思惑の
http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
が表示されるのです。
URLは
http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93
のままで・・・???
あと
> 単純な書換えを用意してチャンと機能するか
この部分ですが、現在テスト段階でものすごくシンプルなもので構成しています。
その中で、ファイル名を何度も変えたり、.htaccessの構文が不意に間違っていたりして、403、404と500エラーは幾度か見ていますので、この部分に関する同様のテストはなされています。
RewriteRule ^worddetail/(.*)$ http://www.hoge.com/worddetail.php?tag=$1 [R]
> > でアクセスした時にエラーが出ない代りに何が表示されるのでしょうか?
> これが不思議と、思惑の
> http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
> が表示されるのです。
> URLは
> http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93
> のままで・・・???
http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93 にアクセスして、
worddetail.php に tag=%E5%B1%B1%E6%9C%AC%E6%A2%93 を渡す事が出来ているのなら、どこが問題点なんでしょうか?
ブラウザのURL表示欄をhttp://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93 にしたいという事でしょうか?
動的ページだとURL表示欄は
http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
と表示されますよね。
これをURL表示欄は
http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93
にリダイレクトしたいのです。
http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93
でアクセスした場合
URL表示欄は
http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93
で、内部的に
http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
で表示されたページが表示されます。
問題は、
http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
にアクセスした場合、URL表示欄も
http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
のままで、リダイレクトされないということです。
コメント気付きませんでした。
私が、コメント書いたり消したりしていたので、メール通知がそれに紛れていたようです。
せっかくコメントくださったのですが、結果変わらずです・・・。
URL表示欄は
http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
のままです。
現在、レンタルサーバーに問い合わせ中です。
技術的なことは通常サポート外ですが、こんだけのアドバイスを頂いても解決できないことを伝えれば、サポートしてくれるのでは?と甘い期待を抱いています。
RewriteRule ^worddetail.php tmp/%{QUERY_STRING}?
RewriteRule ^tmp/tag=(.*)$ http://www.hoge.com/worddetail/$1 [R]
例えば、Amazonnの商品URLなど検索結果以外では、動的なはずなのに静的ページで表示しております。
このように私の動的サイトも静的に見せたいと考えました。
これは、
http://www.google.co.jp/support/webmasters/bin/answer.py?answer=34431&topic=8522
にも推奨していますのでそう考えました。
GEN111さん、何度も何度もホント申し訳ないですm(_ _)m
試した結果、403エラーが出ました。
私の足らない知識と、ネット検索での事例を結構見ましたが、GEN111さんの最初の答えで方向は合ってると思います。
お望みの動作が、
1. worddetail/abc ->、worddetail.php?tag=abc
2. worddetail.php?tag=abc -> worddetail/abc
の2つである事は理解できましたが、mod_rewrite で1.の動作は簡単に出来ます(もう実現済みですね)。
2.の動作は、mod_rewrite ではできません。
mod_rewrite で、ブラウザのURL欄とちがうアドレスへのアクセスだとhttpサーバに指令する事はできますが、ブラウザのURL欄を mod_rewrite では書き換えられないので。
そこで、ご希望のブラウザのURL欄を書換えてやる為に、redirect を指示して実現する事も考えました。
ですが、クエリを上手く渡せないので実現できませんでした。
> この作者はキーワードはGETしていると、別なページにはっきり書いています。
この動作は、1.の動作ですね。
> > worddetail という同じキーワードであちらもこちらもやろうとするからでしょうか?
> この部分もよく解らないのですが、worddetailはキーワードでなくworddetail.phpというファイル名です。
>
> なんか、私が説明を勘違いしていますか?
紛らわしい書き方をしてしまい申し訳ないです。
僕の書いた「キーワード」は、.htaccess で書き換え等を行わせようとする時の一致する文字列の事で、質問者さんがphpで受取りたい文字列等のことではありません。
動作しませんが、.htaccess の内容としてはこんなのを考えていました。
RedirectMatch worddetail\.php(.*)$ /worddetail/$1/
RewriteEngine on
RewriteRule ^worddetail/([0-9a-zA-Z]+)/?$ worddetail.php?tag=$1 [L]
> > (ひょっとするとテストしている時だけ?)
> いえいえ
> (以下略)
ロボットにクエリの付いていない、worddetail/abc のような形で読込ませたい事は了解しているつもりです。
ロボットは自らクエリを作ったりはしないので、クエリが付いたアドレスがどこにも書かれていなければ、そのアドレスを持ち帰る事は無いのではありませんか?
上の例の1.のように書き換えられた後のクエリ付きアドレスは、httpサーバ内での処理なので、ロボットが知る由もありません。
ロボットが読み込んだページに、worddetail/abc のような記述しかなければ、検索エンジンからのアクセスも、worddetail/abc となると思います。
(逆に、サイト内のリンクの記述を worddetail.php?tag=abc としていれば、検索エンジンには worddetail.php?tag=abc しか登録されない)
まだ質問意図を理解できていませんでしたら、ご指摘ください。
説明不足の点はお尋ねください。
http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
のアクセスを
http://www.hoge.com/worddetail/%E5%B1%B1%E6%9C%AC%E6%A2%93
にリダイレクトするには、
phpファイルで処理するのがいいと思います。
具体的には、worddetail.phpファイルの先頭に、次のように書けばいいでしょう。
if( strpos($_SERVER['REQUEST_URI'],'.php') !== FALSE ){
header("Location: http://www.hoge.com/worddetail/".$_GET['tag']);
exit();
}
もちろん
.htaccessには、次のように書いたそうですが、そのままにしておいて下さい。
RewriteEngine on
RewriteRule ^/worddetail/(.*)$ /worddetail.php?tag=$1
静的ページのように見せたいのであれば、そもそも
http://www.hoge.com/worddetail.php?tag=%E5%B1%B1%E6%9C%AC%E6%A2%93
というアクセスをしないように設計すべきだと思います。
例えば、aタグのhref属性の値や、formタグのaction属性の値などに、「?」を使わないものを記述します。
そうすれば、.htaccessで、ご質問欄に書かれたように記述するだけで、OKだと思います。