コード内の 3 つのコメントは、私が達成したいことをかなり正確に説明しています。
<IfModule mod_rewrite.c>
RewriteEngine On
# Change secretdiary.org/index.php?url=URL to secretdiary.org/URL on the browser's url
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
# Redirect http://www.secretdiary.org/ to http://secretdiary.org/
RewriteCond %{HTTP_HOST} !^secretdiary.org$ [NC]
RewriteRule ^(.*)$ http://secretdiary.org/$1 [L,R=301]
# Add trailing slash / if there's none
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]
</IfModule>
ただ、条件をまとめたところに問題があると思います。を入力するwww.secretdiary.org/about
と、(ブラウザに表示されて) になりsecretdiary.org/index.php?url=about
、www は削除されますが、最初のルールは無視されます。順序を切り替えても、まったく役に立ちませんでしたRewriteBase
。しかし、 をつけずに普通に入ると、、 書き換えることなくwww
普通に uri が表示されます。これはなぜですか、どうすれば修正できますか?secretdiary.org/about
その上、私はこの回答と、欠落している場合はURIに末尾のスラッシュを自動的に追加しようとするこの他の回答に従いました。PHP (で実現できたのですが、.htaccess では実現できないのが気になるので、ここでどこに問題があるのかを教えていただけると大変助かります。if (substr($_GET['url'], -1) != "/") header("Location: " . htmlspecialchars($_GET['url']) . '/');