2011-01-24 3 views
1

Я хочу, чтобы мой URL перейти отmod_rewrite удалить подпапку и PHP

root.com/sub/?page=home

К

root.com/home

Я хочу чтобы удалить подпапку, удалите php и просто оставьте основной код. Также, если возможно, я хочу перенаправить все, кроме «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 'ect Я думаю, что я что-то пропустил перед регулярным выражением для второго правила, но им стал новый.

Заранее благодарен!

РЕДАКТОРА: учтено [L] вещь, все еще нет кубиков.

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

+0

шишка/я нашел еще одну проблему, когда я просматривать сайт с моего компьютера он (первая часть) показывает как «www.root.com/page», что хорошо, но на моем компьютерном компьютере он отображается как «www.root.com/sub/page» wtf. – Neros

ответ

0

Проблема 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% это проблема, но она не проверена, поэтому я не буду делать ставку на нее. Никогда не повредить попытку.

+0

Я дал ему уйти, но у меня все еще есть URL-адрес, например, «www.root.com/?page=home», поэтому вложенная папка продолжается, но php все еще около – Neros

0

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

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

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

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

+0

дал этот снимок (среди других вариантов) все еще не может получить он работает: S – Neros