0

私は運がなくて私の問題に対する答えをネットで検索したので、彼女は行きます:

私はSEOの目的でmod_rewriteをやり直していますが、たとえば、すべてのURLを小文字にします。

http://BLAbla.com/

になります

http://bla.com/

現在、私の.htaccessは次のようになっています。

RewriteEngine on 

RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

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

RewriteRule ([\w]*)/$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteRule ^([^/]+)/([^/]?)$ index.php?worker=$1&params=$2 [L]

しかし、http:// localhost / site /を実行すると、エラー500が発生します。基本的な正規表現と非常に限られたmod_rewriteしか知らないため、ここでエラーを確認することはできません。rewritemap行を削除しても、ページにエラーは表示されません。rewritemapは私のサーバーなどでサポートされていませんか?

.htaccessファイルに関するその他のコメントは大歓迎です:)

御時間ありがとうございます。

4

1 に答える 1

5

@Esben

ホスト名の書き換えは少し注意が必要です。サーバーエラーログにアクセスできますか?500の原因に関する情報を使用している可能性があるためです。

わかりやすくするために、パラメーターを引用符で囲むことをお勧めします。

RewriteMap  lc int:tolower
RewriteCond "%{REQUEST_URI}" "[A-Z]"
RewriteRule "(.*)"           "${lc:$1}" [R=301,L]

[L]これにより、このリクエストの処理が強制的に終了します。つまり、URIに対して実行する作業がさらにある場合は、リクエストが再送信されたときに発生します。リクエストが変更プロセスを1回だけ通過するように、変更をバッチ処理することを検討することをお勧めします。

RewriteMap  lc int:tolower
RewriteCond "%{REQUEST_URI}" "[A-Z]"
RewriteRule "(.*)"           "${lc:$1}" [E=REDIRECT:TRUE]

RewriteCond "%{HTTP_HOST}"   "!^www\."  [NC]
RewriteRule "^"              "-"        [E=REDIRECT:TRUE,E=PREFIX_WWW:TRUE]

次のことは何をしようとしていますか?

RewriteRule ([\w]*)/$ http://%{HTTP_HOST}/$1 [R=301,L]

効果(ファンキーな正規表現にもかかわらず)は次のとおりです。'REQUEST_URIが' /'で終わる場合は、それを取り除き、リダイレクトします。それはあなたが望むものですか?.htaccessファイル内では物事が少し異なることに注意してください。

この:

RewriteRule ^([^/]+)/([^/]?)$ index.php?worker=$1&params=$2 [L]

「任意の「foo/bar」を「index.php?worker = foo&params=bar」に変更してください」と言っているようです。それが正しければ、おそらくうまくいかないでしょう。ファイル内にいるので、URIではなく.htaccessファイルシステムパスと照合します。

だからこれを試してみてください:

RewriteMap  "lc"                 "int:tolower"

RewriteCond "%{REQUEST_URI}"     "[A-Z]"
RewriteRule "(.*)"               "${lc:$1}" [E=REDIRECT:TRUE]

RewriteCond "%{HTTP_HOST}"       "!^www\."  [NC]
RewriteRule "^"                  "-"         [E=REDIRECT:TRUE,E=PREFIX_WWW:TRUE]

RewriteCond "${ENV:REDIRECT}"    "!TRUE"
RewriteRule "^"                  "-"        [SKIP=2]
RewriteCond "${ENV:PREFIX_WWW}"  "TRUE"
RewriteRule "(.*)"               "http://www.${HTTP_HOST}/$1"     [R=301,L]
RewriteRule "^"                  "-"                               [R=301,L]

RewriteRule "^([^/]+)/([^/]?)$"  "index.php?worker=$1&params=$2" [PT]

sが混在するステートメントSKIPへの影響についてはわかりませんが、上記を試してみて、もっと近いかどうかを確認してください。RewriteCondRewriteRule

于 2011-02-04T16:07:34.813 に答える