.htaccess 301 Перенаправление доменов без слеша и домена с косой чертой в.html
Я пытаюсь добавить некоторый код в мой.htaccess, чтобы перенаправить URL-адреса с косой чертой и без слеша на.html все URL-адреса, кроме моей домашней страницы.
Например, www.mydomain.com/cat/ и www.mydomain.com/cat следует перенаправить на www.mydomain.com/cat.html.
Мне удалось добавить следующее в мой.htaccess, который перенаправляет www.mydomain.com/cat в нужное место www.mydomain.com/cat.html, но мне нужна помощь, как сделать так, чтобы версия слеша перенаправлялась на страницу.html.
RewriteCond %{REQUEST_URI} !\.[^./]+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://mydomain.com/$1.html [R=301,L]
Весь мой.htaccess выглядит следующим образом, если у кого-то есть какие-либо предложения о том, как он должен выглядеть в свете вышесказанного, он был бы очень признателен.
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^xxx.xxx.xxx.xx [nc,or]
RewriteCond %{HTTP_HOST} ^mydomain.com [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L]
RewriteCond %{REQUEST_URI} !\.[^./]+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://mydomain.com/$1.html [R=301,L]
DirectoryIndex index.html index.php
<IfModule mod_rewrite.c>
RewriteEngine on
# Pleas note that RewriteBase setting is obsolete use it only in case you experience some problems with SEO addon.
# Some hostings require RewriteBase to be uncommented
# Example:
# Your store url is http://www.yourcompany.com/store/cart
# So "RewriteBase" should be:
# RewriteBase /store/cart
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !\.(png|gif|ico|swf|jpe?g|js|css)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php?sef_rewrite=1 [L,QSA]
</IfModule>
Решено: я просто добавил:
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]
1 ответ
Отдельные правила, кажется, работают для вас, но я думаю, что вы можете упростить его до одного правила с дополнительной косой чертой. Ваше правило перенаправляет косую черту в косую черту, которая затем перенаправляет снова в.html. С одним правилом у вас будет только один редирект.
У него есть стандартный RewriteCond, который проверяет, является ли он файлом или папкой, поэтому он не будет перенаправлять.html, если он уже есть. Затем \?
в ReweriteRule есть необязательный слеш.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ http://mydomain.com/$1.html [R=301,L]
Если это все в вашем домене, вы можете опустить его в результате:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ /$1.html [R=301,L]
Кроме того, обратите внимание, что это будет ловить и работать с подпапками, независимо от того, хотите ли вы этого. например, www.mydomain.com/animals/cat/ будет перенаправлен на www.mydomain.com/animals/cat.html.