2012-04-10 6 views
4

Мне сложно получить несколько правил mod_rewrite для совместной работы в моих файлах .htaccess. На всем сайте enitre я хочу сбросить «www». из всех URL-адресов. Я использую следующие в корне документа:несколько правил mod_rewrite в .htaccess

Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301] 

Затем в одной папке «/ помощь» Я хочу сделать 2 переписывает:

  1. изменения domain.com/help/1 в domain.com/index.php?question=1
  2. изменение domain.com/help/category/example к domain.com/index.php?category=example

Так в domain.com/help У меня есть следующие:

Options +FollowSymLinks 
RewriteRule ^([0-9]+)/?$ index.php?question=$1 [NC,L] 
RewriteRule ^category/([^/\.]+)/?$ index.php?category=$1 [NC,L] 

Вышеприведенные 2 файлы .htaccess работают для:
www.domain.com в domain.com
domain.com/help/ 1 к domain.com/index.php?question=1
domain.com/help/category/example к domain.com/index.php?category=example

Но это не работает когда мне нужно bine 2 переписывает, как отбрасывать «www». и переписать подпапки в переменную url. например:
www.domain.com/help/1 до domain.com/index.php?question=1
дает ошибку 500.

Где я ошибся? И лучше ли это делать с 2 файлами .htaccess, или может/должен/должен ли 2 файла быть объединены в файл .htaccess в корневом каталоге документа?

+0

Что говорит журнал ошибок apache? – mensi

ответ

2

Похоже, что правила в файле .htaccess в папке /help применяются, потому что вы запрашиваете что-то в этой папке, поэтому правила родительской папки не будут применяться. Вы можете иметь ваши родительские правила передаются при добавлении RewriteOptions Inherit в .htaccess вашего /помощь папки:

Options +FollowSymLinks 
RewriteOptions Inherit 
RewriteRule ^([0-9]+)/?$ index.php?question=$1 [NC,L] 
RewriteRule ^category/([^/\.]+)/?$ index.php?category=$1 [NC,L] 

Однако наследуемые правила не могут быть применены в том порядке, что вы ожидали. Например, если вы запросите http://www.domain.com/help/1/, вы получите перенаправление на http://domain.com/index.php?question=1, которое может быть не таким, как вы хотите, если вы пытаетесь сделать дружественные URL-адреса SEO, скрывая строку запроса.

Лучше может быть, чтобы переместить материал в /помочь папку в одном в корневом каталоге, так что вы можете контролировать порядок, что правила будут применяться:

Options +FollowSymLinks 

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301] 

RewriteRule ^help/([0-9]+)/?$ /index.php?question=$1 [NC,L] 
RewriteRule ^help/category/([^/\.]+)/?$ /index.php?category=$1 [NC,L] 

Это обеспечивает перенаправление на не-www-домен происходит сначала, затем применяются правила /help. Поэтому, когда вы переходите к http://www.domain.com/help/1/, сначала вы перенаправляетесь на http://domain.com/help/1/, затем применяются правила помощи, а URI переписывается на /index.php?question=1.

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