次のコードは、あなたが求めていることを実行し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 ではなく、この問題の専門家を見つけることができるようになるかもしれませんが、これでうまくいくことを願っています。.htaccess
Override none
httpd.conf
sudo apachectl restart
superuser.com