2013-08-03 3 views
2

Как я пытаюсь перенаправить один полный URL-адресПеренаправление один URL на другой URL с помощью .htaccess

http://www.domain-name.com/download/?page=download 

К этому URL

http://www.domain-name.com/download/show 

Для этой работы я добавил этот код

rewriterule http://www.domain.com/download/?page=download(.*)$ http://www.domain.com/download/show$1 [r=301,nc] 

Но это не работает, и вместо этого он говорит, что URL-адрес, который я запрашиваю, говорит «Запрещено».

Можно ли дать какое-либо решение для этого.

+0

Где шоу взялось? Следует ли всегда добавлять или нет? Можете ли вы объяснить правила, которые вы хотите применить к URL, более ясными? –

ответ

3

RewriteRule не включает строку запроса и не включает http-host. Кроме того, первым аргументом является шаблон регулярного выражения. Без http-хоста вы будете сопоставлять либо download/page=download(etc), либо downloadpage=download(etc).

Вам понадобятся 2 правила. Один, который перенаправляет уродливый URL-адрес на хороший URL-адрес. Одно правило необходимо переписать хороший URL для фактического рабочего URL:

#Rewrite ugly url to nice url 
RewriteCond %{QUERY_STRING} ^page=download&?(.*)$ 
RewriteRule ^download/?$ download/show?%1 [R,L] 

#Now get the nice url to work: 
RewriteRule ^download/show/?$ download/?page=download [QSA,END] 

Второе правило использует флаг QSA, что означает, что он добавит исходную строку запроса в строке запроса в RewriteRule. Флаг END останавливает все перезаписи, поскольку L-флаг не делает этого в контексте .htaccess. END доступен только с Apache 2.3.9 и будет вызывать внутреннюю ошибку сервера, если она используется в версии до этого. Обратите внимание, что вам, вероятно, придется изменить второе правило, чтобы указать на фактический файл.

Вы можете найти документацию here.

Редактировать: Обратите внимание, что НИКОГДА не следует проверять правила htaccess с перенаправлением ПОСТОЯННОГО. Если вы допустили ошибку, браузер запомнит эту ошибку! Только конвертируйте временные перенаправления в постоянные переадресации, если все работает так, как вы ожидаете, что оно будет работать.

+0

Это порождает ошибку 500. – Prix

+0

@Prix Прочитайте все, и вы точно увидите, почему это ... Этот код протестирован ... и работает на Apache 2.3.9 и далее – Sumurai8

+0

Mine is 2.4.6 и I просто разместил ваше правило для тестового диска. – Prix

4

Перенаправление один URL на другой URL с помощью файла Htaccess:

Redirect 301 /en/php/project.html http://www.example.org/newpage.html