htaccess ReWriteCond ReWriteRule - перенаправление происходит, даже если URL содержит бессмысленные символы - PullRequest
0 голосов
/ 15 ноября 2011

Мы только что закончили серьезную реструктуризацию нашего сайта, и я пытаюсь написать набор правил перенаправления различной специфики. Перенаправления наполовину работают:

  • Они правильно перенаправляют старые URL
  • Они неправильно также разрешают и перенаправляют URL-адреса, содержащие текст , а не , указанный в

Операторы ReWriteCond (когда вместо этого я ожидаю увидеть сообщение об ошибке «Не найдено» в браузере.)

Заявления в файле .htaccess (находится в корне веб-сайта) включают в себя:

RewriteBase /

RewriteCond %{REQUEST_URI} /company/company-history.html
RewriteRule (.*)$ http://www.technofrolics.com/about/index.html

RewriteCond %{REQUEST_URI} /press 
RewriteRule (.*)$ http://www.technofrolics.com/gallery/index.html

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

/youcanenteranytext/hereatall/anditstillworks/press

Другими словами, любой текст, следующий за доменом и предшествующий условной строке, представляется разрешенным / проигнорированным. Будем очень благодарны за любые советы о том, как ограничить условие или переписать правило для предотвращения этого!

Спасибо, Маргарита

1 Ответ

0 голосов
/ 16 ноября 2011

Вам необходимо включить границы в регулярные выражения, когда вы пытаетесь сопоставить% {REQUEST_URI}, ^ указывает на начало совпадения.

RewriteCond %{REQUEST_URI} ^/company/company-history\.html

Сделает так, чтобы запросы на /garbage/stuff/comapny/company-history.html не совпадали. И также:

RewriteCond %{REQUEST_URI} ^/press

сделает так, чтобы запросы на /youcanenteranytext/hereatall/anditstillworks/press не совпадали. Вы можете дополнительно использовать $ в своем регулярном выражении, чтобы указать конец совпадения, так что-то вроде этого:

RewriteCond %{REQUEST_URI} ^/press$

будет ТОЛЬКО соответствовать запросам для /press, а не /something/press или /press/somethingelse или /press/.

...