2

私はこれが以前に尋ねられたのを見ました、そして人々は答えを提供します、しかしそれらのどれもうまくいかないようです。URLを書き直そうとしているので、/whateverへのリクエストは/として表示されます。ファイルの場所を変更したくありません。URLだけを変更します。たとえば、誰かが次のように入力した場合:

Http://www.mysite.com/whatever ( the files are located at /docroot/whatever )
I want the URL to show http://www.mysite.com/

私のhtaccess(/ docroot /whateverではなく/docrootに配置)で現在使用しているもの:

RewriteEngine on
RewriteRule   ^whatever/(.+)$   /$1 [L]

何が起こっているのかというと、URLは残っていますが、サーバーはファイル/docrootを探しています。

これは私が必要としているものとは逆で、サーバーが/ docroot/whateverでファイルを検索するURLを必要とします。

4

2 に答える 2

1

後ろ向きだと思います。

  • ルートURIをDOCROOTなどにマップする場合は、Apacheで内部リダイレクトを実行する必要があります。
  • の外部要求を受け取り、http://www.mysite.com/whateverクライアントにルートURIを使用させたい場合は、外部(301)リダイレクトを実行する必要があります。
  • また、無限ループに陥らないようにする必要があります。

次の行はあなたのためにこれを行います:

RewriteEngine On
RewriteBase   /

RewriteCond   %{ENV:REDIRECT_END}  !^1 
RewriteRule   ^whatever/(.+)$  $1               [R=301,L]

RewriteCond   %{REQUEST_URI}   !^/whatever
RewriteRule   ^(.+)$           whatever/$1      [E=END:1,L]

2番目のルールでは、E=END:1は環境変数ENDを1に設定し、内部リダイレクトの後、これはREDIRECT_ENDになります。最初の条件が停止します。たとえば、/ fred-> / whatever / fred->(301)/ fred-とすると、ブラウザがバーフします。

また、302から始めて、ルールが機能するようになったら、301に切り替えます。クライアントブラウザは301をキャッシュするため、これらのルールのデバッグにバグが発生します。

于 2012-08-15T17:12:00.970 に答える
0

これをドキュメント ルートの htaccess ファイルに追加してみてください。

RewriteEngine On

# change the browser's URL address bar
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /whatever($|\ )
RewriteRule ^whatever / [L,R=301]

# internally rewrite / back to whatever
RewriteRule ^$ /whatever [L]
于 2012-08-15T17:34:35.130 に答える