4

Web サイト用に多数の RewriteRules を作成しましたが、ローカル セットアップでは問題ありませんでした。これが私の .htaccess からのスニペットです:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteRule ^news/?$ news.php [L]

ローカルで 127.0.0.1/news にアクセスすると、news.php に適切にリダイレクトされ、URL がマスクされます。リモート サーバーの .htaccess ファイルを更新したところ、上記の例にアクセスしようとすると、次のエラーが表示されます。

要求された URL /mnt/target02/123456/123456/www.mywebsite.com/web/content/news.php がこのサーバーで見つかりませんでした。

ルールを次のように変更してみました。

RewriteRule ^news/?$ http://www.mywebsite.com/news.php [L]

ページが正しく読み込まれます。ただし、アドレス バーにはニュースではなく、news.php が表示されます。足りないものはありますか、それとも醜い (そして安全性の低い) アドレスにこだわっていますか? ありがとう!

4

2 に答える 2

1

あなたが私のようであれば、同じ.htaccessファイルがテスト サーバーと実稼働サーバーの両方で機能するように、置換 URL (新しい宛先) に先頭のスラッシュを追加することを避けようとしています。私はあなたが抱えていたのと同じ問題を抱えていました。必要なのは設定することだけでした:

RewriteBase /

これにより、mod_rewrite は、ファイル ルートではなく Web ルートに基づいて置換 URL を作成するように指示されます。別のヒントとして、宛先のトップ レベルにリダイレクトする必要がある場合は、./代わりに/. 私のテスト サーバーにはポート (8080) があり、ルートにはありません (したがって、空RewriteBaseでは/site1/ありません)。Web 上の書き換えルールの例のほとんどは、このケースを考慮していません。置換が先頭のスラッシュで始まることがない場合は.htaccess、テスト サーバーとライブ サーバーで同じファイルを使用できますRewriteBase。すべてのルールを更新するのではなく、変更する必要があるのは の値だけです。

于 2016-07-02T19:25:57.640 に答える