website.pl/page から website.pl/page/ にリダイレクトすることは可能ですか? 私の .htaccess ファイルは 私の htaccess ファイルです。
2 に答える
.htaccessには正しい行がありますが、必要なのは[L]フラグを[L、R=301]に変更することだけです。
RewriteCond %{REQUEST_FILENAME} !-f #checks if current URI leads to real file
RewriteCond %{REQUEST_URI} !(.*)/$ #checks if URI ends by slash, if not goes next
RewriteRule ^(.*)$ http://paweljanicki.pl/$1/ [L] #this line changes a URI
次のように変更する必要があります。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://paweljanicki.pl/$1/ [L,R=301] #or skip 301 code [L,R]
#R=302 by default, but you can set any valid HTTP response status code 300-399
重要なのは、[L]フラグはブラウザへのリダイレクトを出力しないということですが、Apacheは終了スラッシュ付きのシャドウでwebsite.pl/page URIを処理します(website.pl/page/など)。
RewriteRuleフラグに関するApacheDocsの詳細
デフォルトでは、mod_dir はDirectorySlash
ディレクティブ (デフォルトでは "On" に設定されています) を介してこれを行います。これは、apache が要求がディレクトリに対するものであり、末尾のスラッシュがないと判断した場合、mod_dir は要求を末尾のスラッシュに 301 リダイレクトすることを意味します。
ただし、CMS などの仮想ディレクトリの場合、Apache は mod_dir が末尾のスラッシュを処理する必要があることを認識しません。そのため、既存のファイルやディレクトリを指していないもの、または既存のディレクトリを指していないものすべてに末尾のスラッシュを追加して、*mod_dir をオフにしてみてください*。
ドキュメント ルートの htaccess ファイルで、これらのルールを追加します (既にあるルーティング ルールの種類の上に:
DirectorySlash Off
RewriteEngine On
# if request is for a directory
RewriteCond %{REQUEST_FILENAME} -d
# and is missing the trailing slash
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
# if request isn't for an existing directory or a file
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# and no trailing slash
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]