実現したいこと
mod_rewriteを使い、URLのクエリパラメータの表記を簡潔にしたい
例)
https://example.com/hoge?id=123 (hogeはphpファイル) にアクセスした際に、
https://example.com/hoge/123 にリダイレクトさせたい
発生している問題・分からないこと
問題点1
~/hoge/123 にアクセスした際に ~/hoge.php?id=123 の内容を表示させることはできたが、
~/hoge?id=123 にアクセスがあった際に ~/hoge/123 へリダイレクトさせることが上手くできない。
これは実際に ~/hoge/123 というファイルが存在していないために実現不可能ということでしょうか。
問題点2
~/hoge?id=123 にアクセスした時と
~/hoge/123 にアクセスした時で、相対パスの位置が変わってしまう
これはどちらからもアクセスできるようにした場合、PHPで相対パスの出力を制御するものなのでしょうか。
また、リダイレクトによって ~/hoge/123 からのアクセスのみに統一できれば問題は起こらないが、
例えばまたパラメータが増えて ~/hoge/123/ABC というURLにしたくなった場合、
hoge.php内の相対パスを全て変更するという対応方法が正しい方法なのか不思議に思っています。
該当のソースコード
<IfModule mod_rewrite.c> RewriteEngine On #拡張子.phpを省略してもアクセス可能にする RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteCond %{REQUEST_URI} !hoge/([0-9a-zA-Z]*)/?$ RewriteRule ^(.*)$ $1\.php [L] #~/hoge/123 にアクセスした際に ~/hoge.php?id=123 の内容を表示させる RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^hoge/([0-9a-zA-Z]+)/?$ hoge.php?id=$1 [L] #~/hoge?id=123 にアクセスした際に ~/hoge/123 にリダイレクトさせる RewriteCond %{QUERY_STRING} (^|&)id=([^&]+)($|&) RewriteRule .* - [E=X_QUERY_ID:%2] RewriteRule ^hoge$ hoge/%{ENV:X_QUERY_ID} [R=301,L] </IfModule>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
上記のコードの結果は
https://example.com/hoge.php?id=123 アクセス可能だがリダイレクトしない
https://example.com/hoge?id=123 アクセス可能だがリダイレクトしない
https://example.com/hoge/123 アクセス可能だがCSS等の相対パスが無効になる
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/08/25 15:21 編集
2024/08/25 16:09
2024/08/25 16:21