2009-03-28 5 views
0

をリダイレクト:htaccessファイルは、これは私がhtaccessファイルでやろうとしているものです

  • フォースは、URL
  • からWWWを削除取得するhttp://website.com/site/を使用することができますhttp://website.com/site.phpに移動し、ユーザが追加していない場合でも最後のスラッシュを強制します。だから私はhttp://website.com/siteを書く場合http://website.com/site/に変換されます
  • また、http://website.com/download.php?=file.exeを翻訳してくださいhttp://website.com/download/file.exe http://website.com/news.php?article=43532 into http://website.com/news/article/43532

htaccessコードには、そのドメインを含める必要はありません〜で使用されます。

私はこのような何かを年齢のためにネット上で見つけようとしてきましたが、私は各部分を見つけるだけで、一緒には働きません。

誰もがこれを手伝ってくれますか?

+0

具体的なシナリオはどうですか?ブラウザのアドレスバーが新しいURLで更新されるようにサイトを修復しようとしていますか?または、リダイレクトをブラウザに内部的かつ不可視に実行しようとしていますか? –

+0

URLをきめ細かくしようとしているので、http://website.com/site/にアクセスするとサーバーはhttp://website.com/site.phpを読み込みますが、それはユーザーには見えません。 –

+0

2つ目のポイント(「サイト」のもの)を参照すると、.phpで終わらないすべてのURLに末尾のスラッシュを追加する必要がありますか?または対応するPHPファイルが存在するもののみ?または、他の何か? –

答えて

2

これは私の試みです。 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"> 
+0

"RewriteRule ^([^ /] *)$/$ 1/[R = 301、L]"はうまくいかず、www.website.com//の問題が発生します。そして、 "RewriteRule ^([^ /。] +)$/$ 1/[R = 301、L]"と "RewriteRule ^([^ /。] +)/ $ /$1.php"は、 .com/siteにはスラッシュが追加されていますが、サイトにはCSSがありません。奇妙な。何かご意見は? –

+0

このhtaccessファイルhttp://pastebin.com/m73d31851はhttp://yobird.comのルートに置かれています。http://yobird.com/blogにアクセスして自分で試すことができます –

+0

@mofle - - お詫び申し上げます。私はスクリプトを修正しました。もう一度やり直してください。注意! CSSを動作させるには、CSSの絶対パスを使用する必要があります。詳細は上記をご覧ください。 –

2

ちょうど私の頭の上からこれらを書いた、彼らはエラーがあるかもしれない...しかし、ジストが正しいと思います。エラーがある場合はコメントしてください。 WWWのビットのために

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

サイトビット:

RewriteRule ^([^/]*)$ /$1/ [R=301,L] 
RewriteRule ^([^/]*/)$ /$1.php 

ダウンロード:

RewriteRule ^download/(.+)$ /download.php?file=$1 

ニュース

RewriteRule ^news/article/([0-9]+)$ /news.php?article=$1 
+0

OPの最近のコメントに基づいて、あなたのルールには301が必要ですか? –

+0

はい301. "site bit"はwebsite.comに行くと動作しません。website.comにリダイレクトされます –

+0

@mofle - このページの他の場所で自分の答えを確認してください。私はサイトの正規表現を少し覗いて、私はそれを修正したと思う...多分。 –

関連する問題