2013-08-09 3 views
0

Я пытаюсь написать rewritrule в моем файле htaccess на моей учетной записи 000webhost, но я не могу найти способ заставить его работать!Rewrite не работает?

все файлы загружаются в корневой каталог (public_html). файл .htaccess находится в той же директории.

в адресной строке я получаю что-то вроде этого: domain.com/index.php?city=London

мне это нужно, чтобы изменить domain.com/city/London

Но ничего, кажется, работает через htaccess файл!

вот мой Htaccess код:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/

RewriteRule ^city/([^/]*)$ /index.php?city=$1 [L] 
</IfModule> 

любая помощь будет большим.

+0

попробуйте заменить '*' на '+'. – M1K1O

+0

Вы уверены, что сервер позволяет вам изменить конфигурацию из файла .htaccess? Вы можете проверить это, помещая мусор в этот файл и видя, появится ли ошибка 500. – leafnode

+0

@ M1K1O, Это сделал трюк, но, как упоминалось ниже, я должен написать город/лондон в адресной строке, чтобы увидеть его! он не сделает это автоматически, если вы знаете, что я имею в виду! есть идеи ? –

ответ

0

Чтобы получить правильные «хорошие URLs», вам нужно перенаправить некрасивые URL, чтобы хорошо URL, и внутренне переписать хороший URL, чтобы уродливые, на самом деле работает, URL. У вас уже есть внутренняя переписывание.

С Apache 2.3.9 on вы можете использовать следующее решение. Флаг END недоступен в более ранних версиях и будет вызывать внутреннюю ошибку сервера при использовании. Измените R на R=301, чтобы сделать перенаправление постоянным. Делайте это только тогда, когда все перенаправления и перезаписи работают так, как вы хотите, поскольку браузеры будут кэшировать постоянные переадресации. Флаг END полностью прекратит переписывание и предотвратит бесконечный цикл.

RewriteEngine on 
RewriteBase/

RewriteCond %{QUERY_STRING} city=([^&]*) 
RewriteRule ^index\.php$ /city/%1? [R,L] 

RewriteRule ^city/([^/]*)$ /index.php?city=$1 [END] 

В более ранних версиях Apache вам понадобилось использовать хак. Это работает, потому что %{THE_REQUEST} доступен только как это с внешними запросами, не тогда, когда URL переписан:

RewriteEngine on 
RewriteBase/

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/index\.php\?city=(.*)\s [NC] 
RewriteRule^city/%1? [R,L] 

RewriteRule ^city/([^/]*)$ /index.php?city=$1 [L] 

Пожалуйста, обратите внимание, что я не могу проверить либо RewriteRule на этом компьютере, но я довольно уверен, что я Жду» t сделать опечатку.

+0

Я использовал ваш второй код, и он почти работал, но в адресной строке он показывает domain.com/city/london?city=london. Мне нужно это, чтобы показать domain.com/city/london. я делаю что-то неправильно или что-то не хватает? –

+0

Добавьте завершающий '?' За первый RewriteRule. Это очистит строку запроса. Я изменил его в ответе. – Sumurai8

0

Ваш htaccess работает правильно. В случае, если пользователь посетит страницу domain.com/index.php?city=LondonYou, вы можете перенаправить его. По местоположению заголовка.

header("Location: city/".$_GET['city']); 

И теперь вам нужно только знать, когда пользователь получает доступ к htacces, а когда нет. Просто используйте трюк.

RewriteRule ^city/([^/]*)$ /index.php?city=$1&accessByHtaccess [L] 

С условием.

if(!$_GET['accessByHtaccess ']){ 
    header("Location: city/".$_GET['city']); 
}