1

私が取り組んでいるワードプレス サイトはサブディレクトリに移動したため、他のサイトからのリンクはすべて機能しなくなりました。私は .htaccess で 301 リダイレクトを実装しました。これは問題を修正するので素晴らしいですが、古いルート ディレクトリにはindex.html、クライアントが絶対に見たいと思っているランディング ページが含まれるようになりました。

.htaccessでは、ランディング ページがあるため、ルート ディレクトリの index.html を除いて、すべてのトラフィックをサブ ディレクトリにリダイレクトする (着信リンクを修正する)ように設定するにはどうすればよいでしょうか。

htaccess がどのように機能するかはわかりませんが、これが現在持っているものです。

Order deny,allow
ErrorDocument 404 /404.php
DirectoryIndex index.php index.html

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/$ [OR]
RewriteRule ^.*$ http://example.com/portal/$0 [R=301,L]

ありがとう!!

明確化のために編集:現在、すべてがルートからサブディレクトリにリダイレクトされます。ルート ディレクトリの index.html を除いて、すべてをリダイレクトします。ユーザーがページを指定せずにドメイン名 ( http://example.com) だけを要求した場合、ルート ディレクトリの index.html ページも表示されるようにします。

4

1 に答える 1

1

次のコードは、あなたが求めていることを実行しindex.phpますindex.html

Order deny,allow
ErrorDocument 404 /404.php
DirectoryIndex index.php index.html

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index\.(php|html) [NC]
RewriteCond %{REQUEST_URI} !^/$ {NC]
RewriteRule ^.*$ http://example.com/portal/$0 [R=301,L]

優れたオンライン テスト ツールhttp://htaccess.madewithlove.beを使用してこれをテストしました。

次のテスト ケースを使用します。

http://example.com                -- no rewrite, second condition not met
http://example.com/               -- ditto
http://example.com/index.html     -- first condition not met
http://example.com/index.php      -- first condition not met
http://example.com/some/page.html -- rewritten as http://example.com/portal/some/page.html

編集これはまだ期待どおりに機能しないと言っていました。だから私は大きな銃を持ってきました。書き換えエンジンがディレクティブで行うすべての「最大ログ」をオンにすることによって

RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 9

(明らかに、必要なパスを選択してください)、ターミナルウィンドウでログファイルの最後を見てください

tail -f /var/log/apache2/rewrite.log

どこが正しく機能していないかをすぐに確認できます。少しいじって、次のコードにたどり着きました。「要求された URI が単に/index.htmlまたは/index.phpである場合、または で始まる場合/portal、または空白の場合は、リダイレクトしないでください。

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index\.(php|html) [NC]
RewriteCond %{REQUEST_URI} !^/portal.*$ [NC]
RewriteCond %{REQUEST_URI} !^/$ [NC]
RewriteRule ^(.*)$ http://example.com/portal$0 [R=301,L]

テストケースはうまくいきました-うまくいくかどうかを確認してください!

注: これらの変更は、ルート ディレクトリhttpd.confのファイルではなく、ファイルで行いました。ルート ディレクトリ内のファイルが読み取ら.htaccessれるように注意する必要があります。デフォルトの Apache 構成にはそのディレクトリ用の があるため、追加の作業が必要です。この構成変更をファイルに入れる (そしてコマンドを発行する) ことで、問題を回避できます。誰があなたのウェブサイトをホストしているのか、そしてあなたがどのようなコントロールを持っているのかによって、それはあなたにとって選択肢ではないかもしれません. SO ではなく、この問題の専門家を見つけることができるようになるかもしれませんが、これでうまくいくことを願っています。.htaccessOverride nonehttpd.confsudo apachectl restartsuperuser.com

于 2013-06-14T01:53:11.033 に答える