9

私はhtaccessファイルの専門家ではなく、非常に単純に思えることを試みていますが、それを行うことができませんでした.

私は検索し、最終的にここで何かが私の使用に適していることを見つけましたが、そうではありませんでした. コードは以下です。

これが私が必要とするものの例です:

http://localhost/Test/TestScript.phpこれを示すには:http://localhost/Test/TestScript/元の場所にスクリプトを配置します。

これらは私のルールです(コピー済み):

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /Test

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]

この規則は次のことを示します。

Forbidden You don't have permission to access ".../Test/TestScript.php on this server."

そのため、最後の行を次のように変更しました。

RewriteRule ^.*  http://localhost/Test/TestScript.php  [L]

しかし、今このエラーが発生します:

The page isn't redirecting properly

この場所の素晴らしい人々が私を助けてくれることを願っています。ありがとうございました。

4

3 に答える 3

8

ルールセットはループに陥ります。どれどれ:

要求は、ブラウザに表示するために にhttp://localhost/Test/TestScript.phpリダイレクトされhttp://localhost/Test/TestScript/、最終的に元のリソースにマップし直そうとしています。

多くの人が考えているように、ルールの[L] フラグはプロセスを停止しません。書き換えエンジンは、完全なルール セットをルールごとにループし、特定のルールが一致すると、対応する条件があればループします。このプロセスはリクエストごとに繰り返され、ルールによって新しいリクエストが生成されるため、無限ループに陥りやすくなります。

それが、この場合の「ページが適切にリダイレクトされていません」というメッセージの意味です。

このプロセスの技術的な詳細は次のとおりです。

いくつかの解決策:

I)最善かつより実用的な方法は、最初のリクエストで「きれいな」URL を直接使用し、サイレントにリソースにマッピングすることです。これは、ブラウザのアドレス バーに常に「きれいな」URL が表示されるワンステップ プロセスです。このオプションの利点の 1 つは、着信 URL の URI パスに何も存在する必要がないことです。

  1. リクエスト:http://localhost/Test/TestScript/
  2. 内部的にリソースにマッピング:http://localhost/Test/TestScript.php
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
# Prevent loops
RewriteCond %{REQUEST_URI} !\.php  [NC]
# Map internally to the resource, showing the "pretty" URL in the address bar
RewriteRule  ^([^/]+)/([^/]+)/?   /$1/$2.php  [L,NC]

II)リソースを直接指すリンクが既に存在するためにそれが不可能な場合、「きれいな」URL を表示しながら元の要求からデータを取得する 1 つの方法は、最初に目に見える永続的なリダイレクトを作成し、拡張機能を削除することです。 「きれいな」URL を表示してから、元のリソースに内部的に書き換えます。

  1. リクエスト: http://localhost/Test/TestScript.php
  2. 恒久的かつ目に見えるリダイレクト: http://localhost/Test/TestScript/「きれいな」URL、
  3. への内部およびサイレント マッピング: http://localhost/Test/TestScript.php、元の要求。
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

# Get the URI-path directly from THE_REQUEST variable
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\s/([^/]+)/([^.]+)\.php [NC]
# Strip the extension and redirect permanently
RewriteRule  .*   /%2/%3/   [R=301,L,NC]

# Now the browser bar shows `http://localhost/Test/TestScript/`

# Prevent loops
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.php  [NC]
# Map internally to the original resource
RewriteRule  ^([^/]+)/([^/]+)/?   /$1/$2.php  [L,NC]

ノート:

  1. 上記のオプションは、ルート ディレクトリの 1 つの .htaccess ファイルに配置され、mod_rewrite有効になっていることを確認します。
  2. 文字列TestおよびTestScriptは動的であると見なされ、任意の名前に置き換えることができます。
  3. ホスト名localhostは一例であり、他の名前に置き換えることもできます。
于 2012-12-12T04:33:03.660 に答える
-2

私は .htaccess の専門家ではありませんが、ある時点でリダイレクトする必要はありませんか?

例: リダイレクトhttp://www.yoursite.com/test/testscript/

繰り返しますが、私は専門家ではありません。しかし、これをチェックしてみてください: http://forums.techguy.org/web-design-development/717997-solved-htaccess-redirect-loop-problem.html

于 2012-12-12T04:36:15.240 に答える