基本的に、/stats.php?player=name
と入力するだけでhttps://domain.com/@name
にアクセスできます。ただし、/stats.php?player=name
にリダイレクトするには、古いhttps://domain.com/@name
リンクも必要です。
どうすればいいですか?以下は私の.htaccessファイルです。
<IfModule mod_rewrite.c>
ErrorDocument 404 /404.php
RewriteRule ^@(\w+)$ stats.php?player=$1
Options +FollowSymlinks
Options -MultiViews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
</ifModule>
この場合、すでに「きれいな」URLを「lyい/本物の」URLに書き換えている場合、redirectTHE_REQUEST
をチェックすることで、きれいなURLのいURLにできます。これには、書き換えが行われる前の元のHTTPリクエストが含まれます。そうしないと、いURLに書き戻すときに、書き換えループが作成される危険があります。例えば:
RewriteCond %{THE_REQUEST} \?player=(\w+)\ HTTP
RewriteRule ^stats\.php$ /@%1? [R=301,L]
通常、外部リダイレクトは内部書き換えの前に行われる必要があります。
RewriteRule
ディレクティブではなくRewriteCond
パターンで「stats.php」をチェックすると、すべての単一のリクエストを処理しないことでサーバーの負荷が軽減されます(RewriteRule
が最初に処理されます)。 %1
は、RewriteCond
パターンの最初の括弧で囲まれたサブパターンを指します。そして、末尾の?
(空のクエリ文字列)は、書き換えられた置換からクエリ文字列を本質的に削除します。
また、L
フラグを追加し、スラッシュを前に付けることで現在のRewriteRule
ルートを相対的にします(このファイルがサイトのルートにあると仮定します)。相対URLは.htaccessファイルで問題になる可能性があります。
RewriteRule ^@(\w+)$ /stats.php?player=$1 [L]
また、Options
およびRewriteEngine
ディレクティブを最上部に移動します。
ErrorDocument 404 /404.php
Options +FollowSymlinks
Options -MultiViews
RewriteEngine On
RewriteCond %{THE_REQUEST} \?player=(\w+)\ HTTP
RewriteRule ^stats\.php$ /@%1? [R=301,L]
RewriteRule ^@(\w+)$ /stats.php?player=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ /$1.php [NC,L]
(最後のRewriteRule
置換でもスラッシュを使用しました。relative URLを使用する場合は、RewriteBase
ディレクティブも指定する必要があります。)
<IfModule mod_rewrite.c>
のチェックもおそらく不要です。このモジュールが利用可能な場合にのみErrorDocument
およびOptions
を設定したい場合を除きます!?