質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

Q&A

解決済

1回答

4104閲覧

URLの引数を静的URLにしたい

YuzuRyo61

総合スコア52

mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

1グッド

0クリップ

投稿2016/09/09 11:55

編集2016/09/11 06:01

こんにちは。
URLの引数(?が付くURL)を静的のURLにしたいです。
例としまして、
https://example.com/server/detail?id=example

https://example.com/server/example
にしたいのですが、どうやったらこうできるのでしょうか?

補足

一度以下のコードを試してみましたが、500 Internal Server Errorになってしまいました。

RewriteRule ^server/([0-9a-zA-Z_-.]+)$ server/detail?id=$1 [QSA,PT]

現在は以下のRewriteを設定しています。(.htaccessとして記載)

RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php RewriteRule \.htaccess - [F]

※¥マークになっていますが、バックスラッシュで表記しています。


OSはCentOS Linux release 7.2.1511 (Core) (CentOS 7)
アーキテクチャ(bit)はx86_64です。


VirtualHostの設定は以下のように記述しています。

<VirtualHost ***:443> DocumentRoot /var/www/html/*** ServerName ***:443 ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol +TLSv1 +TLSv1.1 +TLSv1.2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA SSLCertificateFile *** SSLCertificateKeyFile *** SSLCertificateChainFile *** SSLCertificateChainFile *** SSLCACertificateFile *** RewriteRule ^/server/([.0-9a-zA-Z_-]+)$ /server/detail?id=$1 [QSA,PT] <Directory "/var/www/html/***"> allow from all Options +Indexes </Directory> </VirtualHost>

※***の部分は省略しています。

mit0223👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

自分の環境で試しました。
試されているもので、ほぼ正解だと思うのですが、頭の / が抜けています。
あと、[] の中で "-." という並びにすると文字コード上アンダースコア()からピリオド(.) までの範囲の文字すべてという意味になりますが、文字コード上ピリオド(.)=0x2Dよりアンダースコア(_)=0x5Fのほうが大きいので、エラーになってます。cannot compile regular expression のエラーになります。なので、ピリオドを先頭に移動しました。

RewriteRule ^/server/([.0-9a-zA-Z_-]+)$ /server/detail.php?id=$1 [QSA,PT]

上記は httpd.conf に設定する場合で、 .htaccess に書く場合はマッチング対象のパスの方は / をつけてはいけません。

投稿2016/09/09 14:47

編集2016/09/11 06:09
mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YuzuRyo61

2016/09/09 22:23

特に変化はありませんでした。 404 Not Foundになりました...。
mit0223

2016/09/09 23:18

あ、httpd.conf に書いてるんですよね。最初のスラッシュ / を含める必要があるかも。修正します。
mit0223

2016/09/10 05:38

あれ?逆ですか?ユーザがhttps://example.com/server/exampleと打つとhttps://example.com/server/detail?id=exampleに応えるPHPに転送したいということですか?
YuzuRyo61

2016/09/10 05:41

はい。そのURLを打つとhttps://example.com/server/detail?id=exampleと同じようなURLにしたいのですが、どう記述したらよろしいのでしょうか?
YuzuRyo61

2016/09/10 06:05

設定しましたが、エラーが出てしまいました。conf内にRewriteEngine Onも設定しましたが改善されませんでした。
mit0223

2016/09/10 06:09

OSは何ですか?また Apache のバージョンはいくつですか?httpd のエラーログには何か出てませんか?
mit0223

2016/09/10 06:11

「設定しましたが、エラーが出てしまいました」のエラーは 500 ですか?404ですか?
YuzuRyo61

2016/09/10 06:14

設定適用時にSyntax errorが発生して、httpdがストップしてしまいました。
mit0223

2016/09/11 00:08

ピリオドの場所が悪かったので修正しました。
YuzuRyo61

2016/09/11 04:35

config内に貼りつけて、思考してみましたが改善しませんでした・・・。
mit0223

2016/09/11 05:27

確認ですが、「cannot compile regular expression」のエラーが出てますか?そのときの正規表現は「^/server/([.0-9a-zA-Z_-]+)$」ですか?
mit0223

2016/09/11 05:34

config ファイルのテストだけであれば # apachectl configtest でできますので試してみてください。
YuzuRyo61

2016/09/11 05:37

configtestを行った結果、Syntax OKでした。
mit0223

2016/09/11 05:44

あれ?では、改善しなかったというのは? 404 ですか? 500 ですか? 修正後に httpd の reload あるいは再起動は実行しましたか?
YuzuRyo61

2016/09/11 05:45

再起動は実行しました。404のエラーが発生しました。
mit0223

2016/09/11 05:55

すみません。 httpd.conf の中に記述されたということですが、https でアクセスされているので、 /etc/httpd/conf.d/ssl.conf の中の VirtualHost が有効なのではないでしょうか。その場合、 VirtualHost の中に記述してみてもらえますか。
YuzuRyo61

2016/09/11 06:02

内容が長いので質問文に追加で訂正いたしました。
mit0223

2016/09/11 06:08

あ、よくみると、 .htaccess の RewriteRule で detail を detail.php に書き換えてるんですね。PT を指定しているので、この RewriteRule は効いてないと思います。もう一度修正します。
YuzuRyo61

2016/09/11 06:13

ありがとうございます。おかげさまで解決しました。追加でRewriteEngine Onを追記したら解決しました。
mit0223

2016/09/11 06:33

良かったです。最初は気楽に回答したのですが、意外と手ごわかったです。RewiteEngine 気づいてませんでした。すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問