2016-05-10 4 views
1

я собираюсь перенаправить изперенаправление с example.com/forum на example.ir/forum

www.example.com/forum или example.com/forum

в

www.example.ir/forum 

использованием Htaccess

RewriteEngine On  
RewriteCond %{HTTP_HOST} ^example.ir/forum$ [OR]   
RewriteCond %{HTTP_HOST} ^example.com/forum$ [OR]  
RewriteCond %{HTTP_HOST} ^www.example.com/forum$  
RewriteRule (.*) http://www.example.ir/forum$1 [R=301,L] 

Я не могу этого сделать, и я всегда получаю:

www.example.irforum (без косой черты), которая является мертвой ссылкой.

ответ

0

Код, который вы опубликовали, не может быть перенаправлен на www.example.irforum (без косой черты). Фактически, код, который вы опубликовали, ничего не сделает (поскольку ни один из условий не будет соответствовать). Если вы видите перенаправление, то это, возможно, ранее кэшированное (ошибочное) перенаправление.

Предполагая example.com и example.ir указывают на то же место, то попробуйте следующее в вашем файле .htaccess:

RewriteEngine On  
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC] 
RewriteRule ^forum(.*) http://www.example.ir/forum$1 [R=302,L] 

Вышеуказанные правила обрабатываются следующим образом:

  1. Имеет ли URL-путь (за исключением префикса каталога) запроса соответствуют RewriteRulepattern^forum(.*)? Если да, то продолжайте ...
  2. Соответствует ли переменная сервера HTTP_HOSTCondPattern. то есть. Является ли заголовок Host либо www.example.com, либо example.com? Если это так, то продолжить ...
  3. Перенаправить запрос на http://www.example.ir/forum$1 - это RewriteRuleЗамена. $1 относится к захваченной группе (первый скобленный подшаблон) в шаблоне RewriteRule - т.е. любые соответствия (.*).

Если example.com и example.ir точка на разных серверах, то вам не нужно RewriteCond директиву.

Тест с 302 (временными) перенаправлением, пока вы не уверены, что он работает нормально, а затем измените на 301 (постоянный). Или, тест с кешированием браузера отключен.

Переменная HTTP_HOST содержит только заголовок HTTP Host. например. example.com. Это не содержит информации о пути. Используйте шаблон RewriteRule, чтобы соответствовать URL-адресу.

+0

Ничего себе, это работает как шарм, большое спасибо BTW, как я могу узнать логику mod-rewrite? понять, что вы предоставили? –

+0

Много проб и ошибок, тестирование и допрос всего! :) [Документы Apache] (http://httpd.apache.org/docs/current/mod/mod_rewrite.html), возможно, слишком кратки во многих областях, но с несколькими примерами, однако, они являются неоценимой ссылкой.Сложные перезаписи часто связаны с сложным регулярным выражением, которое документы Apache не распространяются вообще. [regular-expressions.info] (http://www.regular-expressions.info/) - мой ресурс goto для регулярного выражения. [askapache.com] (http://www.askapache.com/) - отличный ресурс с множеством фрагментов кода и необработанными примерами, но мало объяснений. Я добавлю больше объяснений в свой ответ ... – MrWhite

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