mod_rewrite удалить подпапку и php - PullRequest
1 голос
/ 24 января 2011

Я хочу, чтобы мой URL шел с

root.com / sub /? Page = home

TO

root.com / дом

Я хочу удалить подпапку, удалить php и просто оставить самый основной URL. Также, если это возможно, я хочу перенаправить всех, кто не «root.com/[*]» обратно на root.com. Например, «root.com/home/index.php?page=home» и «root.com/sub/test/» перенаправят обратно на «root.com».

.htaccess и mod_rewrite, кажется, лучший способ Пока у меня есть это:

RewriteEngine On
#remove subfolder, WORKS
RewriteCond %{HTTP_HOST} ^root\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.root\.com$
RewriteCond %{REQUEST_URI} !^/sub/
RewriteRule (.*) /sub/$1 [L]

Это работает и удалил подпапку

#remove PHP, not working :S
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L]

Но это не работает и оставляет действие «? Page = home» Я думаю, что я упустил что-то до регулярного выражения для второго правила, но я новичок в этом.

Заранее спасибо!

РЕДАКТИРОВАТЬ: принимая во внимание вещь [L], по-прежнему без кости.

Полагаю, это нужно сделать одним ударом, а не отдельными итерациями.

Ответы [ 2 ]

0 голосов
/ 25 января 2011

Это правило - проблема, я думаю:

RewriteRule (.*) /sub/$1 [L]

Попробуйте изменить его на:

RewriteRule (.*) /sub/index.php?page=$1 [L]

0 голосов
/ 24 января 2011

Проблема mod_write обычно заключается в конфликтах; в этом случае второй блок будет соответствовать послесловию добавления первого блока, создавая бесконечный цикл или ошибку 500.

Вы должны добавить флаг [L] к каждому RewriteRule. Э.Г.

RewriteEngine On
#remove subfolder
RewriteCond %{HTTP_HOST} ^root\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.root\.com$
RewriteCond %{REQUEST_URI} !^/sub/
RewriteRule (.*) /sub/$1 [L]

#remove PHP
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L]

Без [L], /abc будет переписан на /index.php?page=abc, а тот переписан на /sub//index.php?page=abc.

Я на 75% уверен, что это проблема, но она не проверена, поэтому я не собираюсь на нее ставить. Никогда не делай больно, пытаясь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...