2010-01-25 2 views
2

Я пытаюсь использовать правила перезаписи в моем .htaccess, чтобы забрать пользователя из старой ссылки на временную новую ссылку (это не постоянный новый сайт, поэтому я не хочу перенаправлять 301)URL-адрес перенаправления с RewriteRule, если php url имеет параметры?

Следующие работает для всех html-страниц, а также страниц php без параметров, но не обрабатывает последний пример - страницу php с параметрами. Обратите внимание, что структура каталогов отличается от нового домена, но параметры URL-адреса точно совпадают. Есть ли что-то, что я могу сделать с регулярными выражениями, чтобы включить rewriterule? У меня нет слишком много опыта написания собственных выражений reg, поэтому я не уверен, с чего начать. Благодаря!

Мой файл .htaccess:

AddType x-mapp-php5 .php 
AddHandler x-mapp-php5 .php 
Options -MultiViews 
Options +FollowSymlinks 
RewriteEngine on 
RewriteRule invest/index.html http://example.org/new_file_structure/invest/index.html 
RewriteRule index-old.html http://example.org/index.php 
RewriteRule invest/i2/ap/row_I2_i_ap1.php http://example.org/new_file_structure/i2/ap/row_I2_i_ap1.php 

##The following doesn't work: 
RewriteRule subpages/view.php?d=i1_014 http://example.org/2010/view.php?d=i1_014 

Спасибо, Джен

ответ

5

Вы должны использовать RewriteCond для обнаружения строки запроса:

RewriteCond %{QUERY_STRING} d=(.+) 

И тогда вам нужно использовать RewriteCond обратной ссылки в виде %n:

RewriteRule subpages/view.php$ http://example.org/2010/view.php?d=%1 
+0

Это работает, спасибо! – Jen

+0

Большое вам спасибо. Вы не представляете, сколько времени я потратил впустую, пытаясь решить эту, казалось бы, простое перенаправление. – justinl

1

Все параметры GET сохраняются в

%{QUERY_STRING} 

вы должны быть в состоянии добавить, что ваш URL переадресации.

RewriteRule subpages/view.php?d=i1_014 http://example.org/2010/view.php?d=i1_014&%{QUERY_STRING} 

Но если вы не хотите 301, почему вы указываете полный URL-адрес? Я так думаю, что вы применяете a 301. Почему бы просто не использовать /2010/view.php....?

+0

Хм. Вы имели в виду это: RewriteRule subpages/view.php?% {QUERY_STRING} http://example.org/2010/view.php?%{QUERY_STRING} Я указываю на полный URL-адрес, потому что новая страница находится в другом домене. – Jen

+0

Ах, ладно. Но если вы используете полный URL 'http: //', я на 99% уверен, что Apache автоматически сделает его '301', а не внутренним перенаправлением. Возможно, я ошибаюсь, если один и тот же домен управляется на одном сервере - попробуйте и посмотрите, что делает браузер. –

+0

Я думаю, что вы на самом деле правы, но я думаю, не имеет значения, является ли это внешним или внутренним перенаправлением, я больше сосредоточен на выяснении того, как фиксировать параметры GET и использовать их для определения URL-адреса для перенаправления. Я попытался использовать% {QUERY_STRING}, но он не работает - должен ли он идти ПОСЛЕ фактических параметров или вместо них? – Jen

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