私は次のシナリオを持っている:Webディレクトリ(ドキュメントルート)でmod_rewriteをオミットHTMLの拡張ループ
二frontcontrollers:
web/frontend.php # handles all *.html requests
web/backend.php # direct calls only
書き換えは、これまでに簡単です:
のでRewriteCond %{REQUEST_URI} !^/backend.php
RewriteRule (.+)\.html$ /frontend.php [L]
今私がexample.org/backend.php
と呼んだとき、私はバックエンドにいますが、特別なことは起こりません。 example.org/
やexample.org/team/john.html
のようなものを呼び出すと、frontend.php
によって処理されます。
これまでのところ動作します!
example.org/team/john
が内部でexample.org/team/john.html
として処理されるように、* .html拡張子を省略することができます。少なくとも最後にではなく、
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_URI}.html [L]
私は、重複したコンテンツを避けるためにjohn
へjohn.html
に要求をリダイレクトします。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^(.+)\.html$
RewriteRule (.*)\.html$ /$1 [R=301,L]
すべての部分は自分で動作しますが、一緒に組み立てるとループが発生しますが、私には驚きませんが、これを避ける方法はわかりません。私はドキュメントを検索し、いくつかのフラグと条件を試しましたが、私は完全に立ち往生しており、私は助けが必要です。すべてのヘルプは素晴らしいことだ
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase/
# extend html extension internally
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule !.*\.html$ %{REQUEST_URI}.html [L]
# redirect example.html to example
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^(.+)\.html$
RewriteRule (.*)\.html$ /$1 [R=301,L]
# frontcontroller
RewriteCond %{REQUEST_URI} !^/backend.php
RewriteRule (.+)\.html$ /frontend.php [L]
</IfModule>
:ここ
は全体の.htaccessファイルです。
驚くばかり!ありがとうございました! –