1

mod_rewrite の正しい手順を作成するのを手伝ってください。とても難しそうです。

私は正確に次のものが必要です:

1. www.site.comからsite.comリダイレクトします。

www.site.com/hello                ==>     site.com/hello
www.site.com/abc/def              ==>     site.com/abc/def

など、その他のルールを適用する必要があります。

2. 特定のファイルやフォルダ ( robots.txt、images/など) への直接アクセス (書き換えなし)

多分

RewriteCond %{REQUEST_URI} !^/(robots.txt|favicon.ico|images|documents|~.\*)

私は正しいですか?したがって、次のような URL

site.com/robots.txt               ==>     site.com/robots.txt
site.com/documents/file1.pdf      ==>     site.com/documents/file1.pdf

書き直してはいけません。

3. 別の変換:

site.com/index.php?anythinghere   ==>     site.com/a/index.php?anythinghere

4. しかし、site.com と site.com/ という URL を入力すると、Apache はルート フォルダー (site.com/index.php) の index.php を呼び出す必要があります。

site.com                          ==>     site.com/index.php
site.com/                         ==>     site.com/index.php

5. MVC スクリプトがあり、次の URL を入力すると:

1. site.com/controller or site.com/controller/ or site.com/controller//
2. site.com/controller/function or site.com/controller/function/
3. site.com/controller/function/parameter or site.com/controller/function/param1/param2/param3

そして、コントローラーがリスト内の事前定義された単語の 1 つである場合、たとえば「index」、「news」、「contacts」(数百語まで拡張される可能性があります) の場合、index.php を呼び出して、URL を書き換えます。次の方法:

site.com/controller               ==>     site.com/index.php?q=controller
site.com/controller/              ==>     site.com/index.php?q=controller/
site.com/controller//             ==>     site.com/index.php?q=controller//
site.com/controller/function      ==>     site.com/index.php?q=controller/function
site.com/controller/function/     ==>     site.com/index.php?q=controller/function/
site.com/controller/function/parameter               ==>  site.com/index.php?q=controller/function/parameter
site.com/controller/function/param1/param2/param3    ==>  site.com/index.php?q=controller/function/param1/param2/param3

6. 最後に、以前のルールがすべて適用されていない場合は、書き直す必要があります。

site.com/anythinghere             ==>     site.com/a/index.php?anythinghere

apache が mod_rewrite を再帰的に使用しないことを願っています。

簡単ではないことは承知しておりますが、ひとつでもルール作りのお手伝いができれば幸いです。

前もって感謝します!

4

1 に答える 1

0

最初の書き換えでは、次の行を .htaccess に入れることができます。

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

検索エンジンがとを 2 つの異なるサイトとしてR=301認識しないように、永続的なリダイレクトにするために配置することは非常に重要です。www.site.comsite.com

2 番目の書き換えでは、多くのオプションが利用可能です。実際に存在するすべてのファイル (画像や PDF ドキュメントなど) を apache に提供させ、一部の MVC コマンドを意味する URL を書き換えると、おそらくより便利になるでしょう。

そう思うなら、5 回目の書き直しをカバーして、次のように書くことができます。

RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^/news$ ./index.php?news  [L]
RewriteRule ^/news/(.*)$ ./index.php?news/$1  [L]

あなたが持っているそれぞれについてcontrollerなど。何百ものコントローラを用意する予定がある場合は、システムの設計を再考するか、いくつかのメイン コントローラのサブコントローラにして、これらのメイン コントローラをこの.htaccessファイルに記述できるようにする必要があると思います。

また、重要なのはL、実行された最後の行(条件に一致した場合は最後の行)であることをApacheに伝えるため、再帰を回避します(特に、よく覚えていれば)。

3番目のものをカバーするには:

RewriteRule ^/index.php?(.*)$ ./a/index.php?$1  [L]

6番目と最後のものをカバーするには:

RewriteRule ^/(.*)$ ./a/index.php?$1  [L]

したがって、書き換え 1、2、3、5、および 6 をカバーすると、次のようになります。

RewriteEngine On

# First rewrite
RewriteCond %{HTTP_HOST} ^www.site.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R=301]

# Second and fifth rewrite
RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^/news$ ./index.php?news  [L]
RewriteRule ^/news/(.*)$ ./index.php?news/$1  [L]

# Third rewrite
RewriteRule ^/index.php?(.*)$ ./a/index.php?$1  [L]

# Sixth rewrite
RewriteRule ^/(.*)$ ./a/index.php?$1  [L]
于 2012-05-03T22:04:41.230 に答える