0

URLを書き換えるなどの目的で最初の.htaccessを作成しようとしていますが、情報を検索して機能させるために2日間を無駄にしてしまいました。

私が達成したいのは次のとおりです。

1)すべての非wwwURLをwwwURLにリダイレクトします(seoのベストプラクティスのようですか?)

domain.com   -->  www.domain.com

2)すべてのhttpsリクエストをhttpリクエストにリダイレクトします。

https://www.domain.com  -->  http://www.domain.com
https://domain.com      -->  http://www.domain.com

3)URLをSEOに適したものに書き直し、最終的にアドレスの末尾にあるスラッシュをすべて削除します。

www.domain.com/abc    -->  www.domain.com/index.php?page=abc
www.domain.com/abc/   -->  www.domain.com/abc


私がこれまでに持っているのは、個別に機能する3つのスニペットです。

# 1) This should be correct, I hope!
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]


# 2) This seems to work 100% right
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L]


#3) Major issues here
RewriteEngine On
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]

これは部分的に機能します:それは私が望むことをします、しかし私がSEOフレンドリーなURLの後に末尾のスラッシュを置くとき、私はすべての相対パスを壊します:

www.domain.com/abc      OK
www.domain.com/abc/     page gets displayed but all relative URL for css and images are broken


さまざまなルールを1つのhtaccessファイルに組み合わせて、正しく相互作用させる方法すらわかりません。

長い説明で申し訳ありませんが、この問題は私にとって非常に苛立たしいものになっています。

4

1 に答える 1

2

もちろん、css ファイルまたは画像への相対パスの問題は、末尾のスラッシュにあります。ブラウザは、彼がサブフォルダにいると認識し、css ファイルへの相対パスを現在の場所に追加します。

www.domain.com/abc/styles/style.css

それ以外の

www.domain.com/styles/style.css

これを回避するには、次の 2 つの方法があります。

  1. 私の推奨する解決策は、html 内のすべてのパスを絶対にすることです。
  2. 末尾のスラッシュなしで同じパスにリダイレクトします。末尾のスラッシュを無視しているように見えるので、これには副作用はありません。一致ルールは次のようになります

    RewriteRule ^([^/\.]+)/?$ http://%{HTTP_HOST}$1 [R=301,L]
    

完全な htaccess ファイルは次のようになります。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} =on
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L]

RewriteRule ^([^/\.]+)/$ http://%{HTTP_HOST}$1 [R=301,L]
RewriteRule ^([^/\.]+)$ index.php?page=$1 [L]
于 2013-02-09T10:27:56.727 に答える