あるディレクトリの .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
「[^\?\./]」で「?」と「.」と「/」以外の文字という意味なので、すべての場合にrewriteしたいのなら、任意の文字を意味する「.」を使って
RewriteRule ^(.+)$ ?$1
にすれば良いと思います。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCondを書くと、既存ファイル、ディレクトリパス以外はRewriteRuleに落ちるので、abcde.htmlでアクセスすればパラメータとしてabcde.htmlがわたされるとおもうのですが?
id:kuippaさんの説明が意図と違う、と判断されてしまったのはは、RewriteRuleの後半部分(index.php以降)が例と異なっていたせいではないでしょうか。
または、考慮しなくて良いとされていた内容を考慮してしまっていたのが問題だったのでしょうか。
個人的には不必要な値をプログラムに渡したくないので、以下のように記述し、値を制限した方が良いと思いました。
.htaccess素人なので定石にそぐわないかもしれませんが、参考になると幸いです。
RewriteRule ^([0-9A-Za-z]+(\.htm[l]?)?)$ ?$1
でも、もしかして、abcde.htmlのファイルが同じディレクトリにあるのではないでしょうか?(質問文とは矛盾しますが…)そうだとすると、kuippaさんのように書くのは意図と正反対ということになりますね。
いずれにせよ、回答者は、もらうポイントとは比べものにならないほどの時間と情熱と努力で回答を書いている人が多くいます。回答者は、頑張った分、結果がどうだったか非常に気になるんですよね。質問者は、その時間と情熱と努力に答える為、丁寧に状況や結果を報告して欲しいと思う今日この頃です。