利他的な uber htaccess ウィザード紳士への挑戦:
私が取り組んでいる新しいサイトの htaccess ファイルを削っていますが、クラックできません。各セグメントは独立して動作していますが、すべてを一緒に動作させることはできません。PHP REQUEST_URI に基づいてサイトを生成しています。複数のドメインが同じディレクトリを指しているため、複数のドメインに対して機能する必要があります。私は達成しようとしています:
- 同じディレクトリを指す複数のドメイン、
- 強制的に非 www、
- 拡張子なしで末尾のスラッシュを強制し、
- 存在しないものをすべて特定のスクリプトにリダイレクトする
基本的に:
http://www.example.com/dog/cat -> 301 は -> http://example.com/dog/cat/のように表示されます-> しかし、静かに -> http://example.com/script にリダイレクトされます。 php
また
http://www.example.com/dog/cat/pig/bird/walrus -> 301 は次のように表示されます -> http://example.com/dog/cat/pig/bird/walrus/ -> 静かにリダイレクトします - > http://example.com/script.php
また
http://www.example.com/dog/cat.html -> 301 は次のように表示されます -> http://example.com/dog/cat/ -> サイレントにリダイレクトします -> http://example.com/script .php
また
http://www.example.com/dog.php -> 301 は次のように表示されます -> http://example.com/dog/ -> サイレントにhttp://example.com/script.phpにリダイレクトします
これまでのところ、次のスニペットを使用してきました(記憶から許してください):
非 www:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
末尾のスラッシュを取り除きます:
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]
スクリプトにはすべて存在しません:
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^.*/$ ./script.php [L]
特定の部分がまったく機能しない、再帰的な影響などの問題がありました。助けを求めるのは好きではなく、宿題をするために最善を尽くしましたが、これを理解できません。
ここで、次のような同様の質問を見つけました。
htaccess は末尾にスラッシュを追加し、クリーンな URL で www を強制します
どんな助けでも大歓迎です!
アップデート:
そのため、.htaccess ファイルをいじり続けました。質問の下にコメントを追加して、Firefox の「素晴らしい」アドレスバー検索機能で、ドメインが www や末尾のスラッシュがない場合にドメイン名をリダイレクトして検索することに問題があったことを伝えました。このため、スキームを一貫性のあるものに変更しましたが (重複を防ぎます)、反対のことを行いました: www と末尾のスラッシュを強制します。
次のコードは、探しているものに近い結果を生成します。
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
#Redirect Forcing trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ /$0/ [L,R=301]
#Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
#Redirect to script
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ script.php [L]
存在しないファイルから拡張子を削除する必要があります。つまり、次のようになります。
www.example.com/cats.html -> www.example.com/cats/
どんなアドバイスも世界を意味するでしょう...