ModRewrite странное поведение перенаправления при удалении WWW - PullRequest
1 голос
/ 01 июня 2010

Я пытаюсь использовать какое-то правило в своем проекте для удаления www с начала URL, но у меня есть некоторые проблемы.

моя структура сервера:

domain.com/beta_folder
domain.com/beta_folder/page+type
domain.com/beta_folder/page+type/content+name
domain.com/beta_folder/page+type/content+name/edit
domain.com/beta_folder/page+type/content+name/etc.

domain.com/beta_folder/.htaccess //here is where my htaccess is

beta_folder - папка сайта, а content+name - переменные содержимого, созданные для извлечения страниц из базы данных.

сайт отлично работает по этим правилам

RewriteEngine On
RewriteRule ^(page\+type/)([a-zA-Z0-9_+-]+)[/]?$ page_folder/page.php?varname=$2

Я хотел удалить www, поэтому я добавил это правило, но оно не действует

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com$1 [R=301,L]
RewriteRule ^(page\+type/)([a-zA-Z0-9_+-]+)[/]?$ page_folder/page.php?varname=$2

Моя проблема начинается, если я наберу www перед моим доменным именем:

это работает

http://domain.com/beta_folder/page+type/content+name

если я напишу

http://www.domain.com/beta_folder/page+type/content+name

, то правило перезаписи перенаправит меня на

http://www.domain.compage+type/content+name

, если я удалю www правила,проблема все еще активна

к сожалению, я не могу сделать публичный тест для своего домена

в принципе, если я пишу

 http://www.domain.com/beta_folder

, правила отправляют меня на

 http://domain.com/

единственный способ, который я нашел, чтобы решить эту проблему, это написать папку, в которой находится мой сайт, так:

RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/beta_folder/$1 [R=301,L]

Я не понимаю, почему я должен написатьпапка, потому что мой cond для перезаписи влияет на http://www.domain.com/folder_name/contents, а не http://www.domain.com/contents

почему folder_name отсутствует при перезаписи?

1 Ответ

0 голосов
/ 01 июня 2010

Попробуйте это, несколько другой пример вашего правила:

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

Кричи, если это не решит твою проблему.

...