mod_rewrite продолжает добавлять .html для файлов - PullRequest
0 голосов
/ 23 марта 2012

У меня есть ситуация перенаправления, когда сайт является частично динамическим и частично сгенерированным .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]

Что я делаю не так?Очень ценю это:)

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Вот код, который вам понадобится в вашем .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 голосов
/ 02 апреля 2012

Может быть, вам стоит попробовать посмотреть на mod_negotiation в apache, чтобы избавиться от .html или любого расширения файла?

Ссылка: http://httpd.apache.org/docs/2.0/mod/mod_negotiation.html

...