2011-02-05 3 views
1

私はすべてのプロジェクトに独自のURLがあり、username = 'foo'の場合、URLはhttp://website.com/fooとなります。私はhtaccessに慣れていませんが、私はそれを大部分は機能させることができました。しかし、私は今誰かがhttp://website.com/subdomain/fooを入力するときに問題に遭遇しています。これで現在はユーザー名を見つけてページを表示しようとしていますが、私はそれを動作させたくなく、404ページを表示したいと思っています。またMod_rewriteはユーザーに独自のURLを与えて、いくつかのケースを除外する必要があります

、上のいくつかのサブドメインの(すなわち程度)私たちは、このような「ourstory.php」などの他のページを持っています。私はabout/ourstory.phpではなくabout/ourstoryを表示したいのですが、選択されたサブドメインに対してのみ表示したいと思います。構造「website.com/subdomain/subdomain」を有する場合、絶対パスが使用されている場合でも、他のPHPファイルを必要とする場合

最後に、それは内部サーバーエラーを生成します。

はここに私の現在のmod_rewriteのですが、私は、私はおそらくいくつかの初心者のミスを作ったあなたは、私がやると、最適化して自由に感じるしようとするかを理解することができます願っています。

このmod書き換えは、次の3つを行います。
1.アドレスの 'www'を削除します。
2. 2番目のページでは、ホームページを入力するだけでホームページに移動します(これを削除すると何らかの理由でホームページが空になることがあります)。
3名がサブドメインではないこと型付けされた場合は、プロフィールページにリダイレクトして、URLにユーザー名になります。

<IfModule mod_rewrite.c> 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 
</IfModule> 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)/$ http://website.com/$1 [R=301,L] 
</IfModule> 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\.(css|gif|ico|jpg|js|png|swf|txt)$ 
RewriteRule ^(.{5,16})$ profile.php?scrname=$1 
RewriteRule ^(.+)(\.php|\.html)/$ /$1$2 [R=301,L] 
</IfModule> 

また、何か助けに感謝します。

答えて

1

私は疑問を提起したので、いくつかの進歩を遂げています。ここで は私がなってしまった(一見とてもシンプル)のmod_rewriteである:それは私が望んでいたすべてを行い

<IfModule mod_rewrite.c> 
    //mod_rewrite by Marc 
    RewriteEngine On 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 
    RewriteCond %{SCRIPT_FILENAME} !-d 
    RewriteCond %{SCRIPT_FILENAME} !-f 
    RewriteRule ^(\w+)$ ./project.php?id=$1 
</IfModule> 

、内部サーバーエラーを修正し、したがって、私はもう.PHPを削除するには、書き換えを必要としません。私はそれが他の誰かを助けることができると思います。

1

代わりにfront controllerを使用すると、メンテナンスが容易になる場合があります。基本的には、静的ファイル以外のすべてのリクエストを単一のPHPスクリプトにリダイレクトします。これにより、mod_rewriteルールよりも簡単にコードで表現される高度なルールを実行できます。

あなたの.htaccessは、少しのように見えるかもしれません:

RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !-d 
RewriteRule ^(.*)$ index.php?q=$1 

あなたのPHPコードでは、その後、レンダリングするページを決定する$_GET['q']を調べることによって、これを処理することができます。

+0

ありがとうございました。サブドメインを使用した場合にこのような方法を使用できます。 たとえば、URLを取得してサブドメインが含まれているかどうかを確認し、そうでない場合はユーザーの代わりに状態ページが見つからないか、ユーザーページを表示します。 しかし、それは特定のサブディレクトリファイルでの.phpの削除やサブサブディレクトリでの問題を解決するものではありません。 PS:私はサブディレクトリを意味していたのですが、何度か「サブドメイン」という言葉を使いましたが、混乱して申し訳ありません。 –

関連する問題