2012-03-23 2 views
0

У меня ситуация с перенаправлением, где сайт является частью динамического и частично сгенерированным .html-файлами.mod_rewrite продолжает добавлять .html для файлов

Например, mysite.com/homepage и mysite.com/products/42 фактически статические HTML файлы

В то время как другие URL-адреса генерируются динамически, как mysite.com/cart

Оба mysite.com и www.mysite.com указывают на одно и то же место. Однако я хочу перенаправить весь трафик с сайта mysite.com на www.mysite.com.

Я так близко, но я столкнулся с проблемой, когда Apache добавляет .html в конец моих URL-адресов для чего-либо, где существует статический .html-файл, чего я не хочу.

Я хочу, чтобы перенаправить это:

http://mysite.com/products/42 

Для этого:

http://www.mysite.com/products/42 

Но Apache делает его об этом, вместо этого (потому что 42.html является актуальной HTML-файл):

http://www.mysite.com/products/42.html 

Я не хочу этого - я хочу, чтобы он перенаправлялся на www.mysite.com/products/42

Вот что я начал с:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 

RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L] 

Я попытался сделать параметры и .html необязательными, но .html все еще получает добавлен редиректа:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 

RewriteRule ^(.*)?(\.html)?$ http://www.mysite.com/$1 [R=301,L] 

Что я делаю неправильно? Действительно ценим это :)

+0

@WayneArthurton: Если вы можете, пожалуйста, объясните, что не работает с моим ответом, то я могу быть в лучшем положении, чтобы помочь вам в дальнейшем. – anubhava

ответ

2

Вот код, который вы будете нуждаться в вашем .htaccess под DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

## first add www to your domain for and hide .html extension 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC] 
RewriteRule^http://www.mysite.com%1 [R=301,L] 

## add www to your domain for other URIs without .html extension 
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 
RewriteRule^http://www.mysite.com%{REQUEST_URI} [R=301,L] 

## To internally redirect /dir/foo to /dir/foo.html 
RewriteCond %{REQUEST_FILENAME}.html -f [NC] 
RewriteRule^%{REQUEST_URI}.html [L] 
+0

Разве это не требует 2 перенаправления? Я бы предпочел только сделать 1 и не добавить его .html. – user12093810293812031

+0

Может быть сделано и в одном переадресации, но это будет обрабатывать только расширения .html. Что, если ваш исходный URI является 'http: // mysite.com/foo /', вы не хотите, чтобы это было http: // www.mysite.com/foo/'? – anubhava

+0

Отредактированный мой ответ, PLS проверить его сейчас. – anubhava

Смежные вопросы