2015-03-09 2 views
-1

Я знаю, что на этот ответ больше всего ответили, но я не могу найти решение для меня. Я написал файл .htaccess для перезаписи URL. У меня есть некоторые страницы йоту GET URL, как:RewriteRule не работает с htaccess

example.com/home.php?page=profile

example.com/home.php?page=forum

example.com/home. PHP? страница = продукт & ID = 1

мне нужно перенаправить с example.com/home.php?page=forum на example.com/home/forum

Итак, это Htaccess

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 
RewriteRule ^/home/([A-Za-z0-9-]+)/?$ home.php?page=$1 [L,R=301] 


SecFilterEngine Off 

<Files .htaccess> 
order allow,deny 
deny from all 
</Files> 

Options All -Indexes 

Когда я печатаю URL-адрес: example.com/home/forum, я перенаправляюсь на example.com/home.php?page=forum , так что обратная функция. Что я делаю неправильно?

+0

Что происходит вместо правильной работы? Я заметил, что у вас есть ведущий '/' on '/ home', но в контексте .htaccess'/'не будет сопоставлен. URI с этой точки зрения - это просто 'home/profile', а не'/home/profile'. –

+0

Теперь он работает наоборот: если я перейду к example.com/home/profile, перенаправите меня в example.com?page=profile. Мне нужна обратная функция. –

+1

Пожалуйста, измените свой вопрос, чтобы точно указать URL-адрес ввода, который отправляет браузер, URL-адрес Apache обрабатывается внутренне и URL-адрес вывода, который в конечном итоге отображается в адресной строке браузера. –

ответ

0

Вставьте эти 2 правила ниже www удаления:

RewriteCond %{THE_REQUEST} \s/+home\.php\?id=([^\s&]+) [NC] 
RewriteRule^/home/%1? [R=302,L,NE] 

RewriteRule ^home/([A-Za-z0-9-]+)/?$ home.php?page=$1 [L,QSA] 

также держать Options вроде как:

Options +FollowSymLinks -MultiViews 
+0

Не работает человек, все еще обратная функция, но теперь я не перенаправляюсь, я вижу пустую страницу в example.com/home/forum –

+0

Является ли '/ home /' каталогом? Где находится этот htaccess? – anubhava

1

Я не не менее опытный с mod_rewrite, и регулярно имеют трудное время с каждая часть конфигурации сервера, поэтому я обманываю, где это возможно. Поэтому я использовал следующий превосходный инструмент веб-ориентированного переписывания: Mod Rewrite Generator

RewriteRule ^home/([^/]*)$ /home.php?page=$1 

Я истолковать сгенерированный шаблон вроде этого: искать что-то после того, как протокол/доменную часть, которая напоминает слово дом, за которым следует косой черты всем, кроме второй косой черты (так/home/forum/1 не будет распознаваться). Замените его /home.php?page=forum, где $ 1 является обратной ссылкой на группу захвата «все, кроме слэша». Вы должны поиграть, чтобы удовлетворить ваши потребности.

Если вы хотите, чтобы ваш второй случай использования (дополнительный параметр ID) охватывал добавить еще одно правило:

RewriteRule ^home/(.*)/(.*)$ /home.php?page=$1&id=$2 

Я думаю, что мы все должны копать немного глубже. Если вы указали в Google, многие источники расскажут вам о важности при выборе между R = 301 и 302, так как ваш выбор повлияет на поисковые роботы Google. Вы можете найти компактный ввод/руководство прямо здесь: Hidden features of mod_rewrite. Из-за этого руководства я удалил [L, R = 301].

Я не ожидаю от вас каких-либо повышений, так как я чувствую, что ответ не является полным, а код упрощен для ваших нужд. Кроме того, я использовал внешний инструмент.


Редактировать (по Drew):

Следует соблюдать осторожность при прохождении параметров любых конфиденциальных данных, как описано в этом Troy Hunt article и изображение в нем показано ниже:

enter image description here

Даже при активированном SSL параметры отображаются на ходу сервера на целевом сервере. В отличие от http POST-данных.

+0

Спасибо, что поделились онлайновой ссылкой. Будьте осторожны, чтобы никогда не использовать для передачи конфиденциальных параметров, таких как учетные данные. Или, откровенно говоря, ничего, что было послано в ясном желании, не было. Если вам нужна ссылка, почему, я могу пройти по URL-адресу. – Drew

+0

@ Drew: На самом деле не нужно быть благодарным, так как я не писал гида (но я был бы счастлив, если бы знал, что большая часть арканума mod_rewrite). Конечно, отправьте некоторую ссылку, чтобы уточнить свой намек на передачу параметров. ATM Я использую hiawatha (относительно безопасен для безопасности), но я обязательно буду использовать apache время от времени. – user3469861

+0

ОК дайте мне 5 минут или около того – Drew

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