Hatena::Groupstudyroom

phaのPHPとか自習室 このページをアンテナに追加 RSSフィード

PHP(CakePHPとか)、JavaScript(AJAXとか)、MySQL、UNIX、Fireworksなんかを身につけたい><
2007 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2009 | 01 | 02 | 03 | 04 |
2010 | 01 | 06 |
2011 | 01 |

2007-05-11

RewriteRuleをいろいろ試す会:RewriteCondを使う

RewriteRuleをいろいろ試す会:RewriteCondを使う - phaのPHPとか自習室 を含むブックマーク はてなブックマーク - RewriteRuleをいろいろ試す会:RewriteCondを使う - phaのPHPとか自習室 RewriteRuleをいろいろ試す会:RewriteCondを使う - phaのPHPとか自習室 のブックマークコメント

http://q.hatena.ne.jp/./1178869014

Apachemod_rewriteの質問です。mod_rewriteを使って

 http://aaa.com/キーワード

 http://aaa.com/キーワード/

へのアクセス

 http://aaa.com/index.php?key=キーワード

転送したいのですが(キーワード日本語ですがエンコード済み)、

 RewriteRule ^([^/]+)/?$ index.php?key=$1

と書くと、

 http://aaa.com/index.php

 http://aaa.com/index.css

などのファイルへのアクセス転送されてうまく動かなくなってしまうようです。

こういう場合はどう書けばいいのでしょうか?

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^/]+)/?$ index.php?key=$1

RewriteCond で適用条件を指定してやればどうでしょうか。

!-f は存在するファイル名にはルールを適用しない

!-d は存在するディレクトリ名にはルールを適用しない

http://q.hatena.ne.jp/./1142313466

mod_rewrite について質問です。

あるディレクトリの .htaccess に

RewriteEngine on

RewriteRule ^([^\?\./]+)$ ?$1

記述しています。

これでクエスチョンマークを省略した形でクエリを受け取ることはできました。

 例:http://xxx.com/mylink/abcde にアクセスされた場合、mylink/index.cgiにて「abcde」をクエリとして受け取る

ただこの形ですと、例えば http://xxx.com/mylink/abcde.html にアクセスすると、直接URLを探しに行ってしまいます。

「abcde.html」という文字列を、ファイル名ではなくクエリとして受け取りたいのですが、そのようなことは可能でしょうか?

動的リソースはrewriteできないということも聞いたのですが、もし可能であればズバリコードを教えて下さいますでしょうか。

ちなみに.htaccessを配置してあるディレクトリにはindex.cgi以外は他のファイルや下層ディレクトリなども一切設置することはありませんので、"この場合だけは実在のファイル(URL)に飛ばしたい"というようなことは一切考慮して頂かなくても結構です。

宜しくお願いします。m(_ _)m

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCondを書くと、既存ファイルディレクトリパス以外はRewriteRuleに落ちるので、abcde.htmlアクセスすればパラメータとしてabcde.htmlがわたされるとおもうのですが?

RewriteRule ^([0-9A-Za-z]+(\.htm[l]?)?)$ ?$1