InstagramやFacebookのようなソーシャルプラットフォームを作成しようとしており、ユーザーにexamplesite.com/usernamehereのようなユーザー名をURLで表示したいと考えています。これを行う方法を調べていたところ、htaccessの書き換えコードで作成できることを知りました。コードがあります
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ user.php?url=$1 [QSA,L]
通常は動作しますが、たとえば、examplesite.com/login または登録ページにアクセスしようとすると、rewriterules は login または register という単語をユーザー名と認識し、ページが開きません。フォルダーが開いている必要があり、サーバー上の css、scss、js、img などのフォルダーもユーザー名として取得する必要があるため、examplesite.com/css、img、js などの単語が URL に書き込まれると、css、img、js ファイルが開かれることはありません。
英語が下手ですみません。みなさんありがとう!<3
答え1
さまざまなこと:
.htaccess
ファイルを使わない
.htaccess
ファイル内のコードが何度もコピーされるという、善意に基づいた例が数多くあります。カーゴカルトシステム管理者 代わりに実際のマニュアルを読むべきです。
から:https://httpd.apache.org/docs/2.4/howto/htaccess.html
一般的に、
.htaccess
メインのサーバー設定ファイルにアクセスできない場合にのみファイルを使用する必要があります。たとえば、ユーザー認証は常に.htaccessファイルで行うべきだという誤解がよくありますが、最近では、mod_rewriteディレクティブに関するもう一つの誤解しなければならないファイルに入ります.htaccess
。これは単純に事実ではありません。...
RewriteRule
ディレクティブの場合、.htaccess
コンテキストこれらの正規表現は、ディレクトリへのリクエストごとに再コンパイルする必要がありますが、メイン サーバーの構成コンテキストでは、一度コンパイルされてキャッシュされます。さらに、ルール自体はより複雑で、ディレクトリごとのコンテキストとmod_rewriteに伴う制限を回避する必要があります。書き換えガイド この件に関する詳細については。
2番目:
マッピングから除外する必要があるディレクトリ名がいくつかすでに言及されていますexample.com/[user-alias]
。
サインアップ ページで、ユーザーが意図的にこれらのディレクトリ名 (およびその他の名前) をユーザー エイリアスとして選択することを禁止することも忘れないでください。
最後
RewriteCond
ディレクティブは、次の対象となるリクエストの種類を制限するために使用されますRewriteRule
。
RewriteRule
現在、設定では、「平易な」英語で、リクエストのファイル名コンポーネントと同じ名前の既存のファイルまたはディレクトリがある場合は、以下を適用しないよう指示されています。
追加の行を使用して、これに追加の条件を追加するだけです。RewriteCond
次に例を示します。
RewriteCond %{REQUEST_FILENAME} !"login"
除外すべきexample.com/login