これは私の試みです。 Apache manualはかなり良いことに注意してください。私はbenlumleyと「サイト」の部分が異なります。また、ニュース記事の名前がすべて数字でない場合は、(.+)
に([0-9]+)
を置き換えることもできます。
# Ensure that rewriting is enabled
RewriteEngine on
# First strip the www as benlumley did
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Then convert /site to /site/, reflecting the change in the address bar
RewriteRule ^([^/.]+)$ /$1/ [R=301,L]
# Finally map /site/ to /site.php
RewriteRule ^([^/.]+)/$ /$1.php
# Finally, fix download and news as benlumley did
RewriteRule ^download/(.+)$ /download.php?file=$1
RewriteRule ^news/article/([0-9]+)$ /news.php?article=$1
EDIT: "ストリップWWW" の部分のための固定コピー/貼り付けエラー。
注:あなたが効果的にページがから提供しているように見えるディレクトリを変更しているので、あなたが持っている任意の<link href="...">
または<script src="...">
タグは今、絶対パスとして指定する必要があります。
など。あなたのblog.phpから次の行を考えてみます。
<link rel="stylesheet" type="text/css" href="style.css">
以前のブラウザはhttp://site/blog.phpを見たので、働いていたhttp://site/style.cssを取得しようとしました。
ブラウザでは、代わりにhttp://site/blog/が表示され、上記の相対URLは存在しないhttp://site/blog/style.cssと解釈されます。そのため、hrefを次のように変更する必要があります。
<link rel="stylesheet" type="text/css" href="/style.css">
具体的なシナリオはどうですか?ブラウザのアドレスバーが新しいURLで更新されるようにサイトを修復しようとしていますか?または、リダイレクトをブラウザに内部的かつ不可視に実行しようとしていますか? –
URLをきめ細かくしようとしているので、http://website.com/site/にアクセスするとサーバーはhttp://website.com/site.phpを読み込みますが、それはユーザーには見えません。 –
2つ目のポイント(「サイト」のもの)を参照すると、.phpで終わらないすべてのURLに末尾のスラッシュを追加する必要がありますか?または対応するPHPファイルが存在するもののみ?または、他の何か? –