現在、PHPブログに取り組んでいます。 .htaccess
ファイルを使用してクリーンなURLを取得した場合のコードは次のとおりです。
RewriteEngine On
RewriteCond %{HTTPS} !=off
RewriteCond %{HTTP_Host} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^([0-9]+)/([a-zA-Z0-9_-]+)?$ post.php?post_id=$1&title=$2 [L]
RewriteRule ^(.+)/(admin|css|fonts|ico|include|js|images)/(.*)$ $2/$3 [L]
このコードをオンラインで入手しました。私はPHPとこの.htaccess
に慣れていないので、それについてあまり知らないのはそのためです。
.htaccess
ファイルを追加する前のURL:
http://www.example.com/post.php?post_id=12&title=post-title
そして、.htaccess
ファイルを追加した後のURL:
http://www.example.com/12/post-title
だからRewriteRule
は私に欲しいURLをくれた。ただし、ページのリダイレクトでエラーが発生しました。次のURLにアクセスした後、ホームボタンをクリックするたびに.htaccess
ファイルを使用する前に:
http://www.example.com/post.php?post_id=12&title=post-title
次に、URLがホームページに正常にリダイレクトされました。つまり、
http://www.example.com/index.php
ただし、同じURLにアクセスした後に.htaccess
ファイルを使用すると、次のようにリダイレクトされます。
http://www.example.com/12/index.php
そして今、それは404ページが見つかりませんエラーを発生しています。技術的には、サーバー上の12ディレクトリの下にそのようなページが存在しないためです。したがって、基本的にすべてのファイルの前に12を追加します。
そのため、次のリンクにアクセスした後、http://www.example.com/12/post-title
.htaccess
ファイルを追加する前にページをリダイレクトしていたので、適切にリダイレクトする必要があります。
ルートの相対URL(例:index.php
)からではなく、relative URL(例:/index.php
)にリンクしているようです。絶対URL(スキーム+ホスト+ URLパス)でも。
たとえば、index.php
にリンクし、URL /12/post-title
にいる場合、これは当然/12/index.php
(不正)に解決されます。一方、/index.php
にリンクする場合、これは/index.php
(正しい)に解決されます。
ただし、URLにindex.php
が本当に必要ですか?通常、ディレクトリにリンクし(末尾にスラッシュを付けて)、サーバーに適切なディレクトリインデックスで応答させます。例えば:
<a href="/">Home</a>