GoDaddy: переписать секунду в.htaccess не работает с "началом строки" (^)


У меня есть .htaccess, содержащий RewriteCond и RewriteRule.

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

Предположим, я хочу перенаправить www.mydomain.com/foo, но не тогда, когда foo встречается где-либо еще; так, например, не перенаправляйте, если URI /abc/foo, /abcfoo, или /foobar.

Вот мой текущий .htaccess файл:

Options -Indexes +FollowSymLinks -Multiviews

RewriteEngine On

RewriteCond  %{REQUEST_URI}  ^/foo$
RewriteRule  .  /redirect.html  [last,redirect=temp]

Я попытался изменить ^/foo$ в разными способами, но я не могу заставить это работать.

Следующие все работают, как и ожидалось:

foo         Redirects wherever foo appears, e.g. /abcfoobar
foo$        Redirects whenever foo appears at the end, e.g. /abc/defoo
/foo        Redirects whenever /foo appears, e.g. /abc/foobar
/foo$       Redirects whenever /foo appears at the end, e.g. /abc/foo

Следующее всегда возвращает 404 Не найдено , независимо от того, что я указываю в качестве URI.

^foo
^/foo
^/foo$

Я не знаю, что происходит.

Пожалуйста, помогите мне исправить это. На случай, если это поможет, я использую хостинг GoDaddy.

Author: Paddy Landau, 2015-02-09

2 answers

Я не уверен, в чем проблема в вашем случае (я протестировал ваш фрагмент кода, и он работает так, как ожидалось), но, возможно, это сработает для вас:

RewriteEngine On
RewriteRule ^foo$ /redirect.html [redirect=temp,last]

Я не эксперт по.htaccess, но я думаю, что это было бы даже быстрее, потому что шаблон RewriteRule обрабатывается до RewriteCond.

 4
Author: unor, 2015-02-09 17:30:03

Я только что нашел решение! Похоже, это что-то особенное.

Домены в GoDaddy хранятся во вложенных папках; например, mydomain.com могут храниться во вложенной папке, называемой md.

Любопытно, что начало %{REQUEST_URI} включает в себя эту строку. Поэтому моя вторая запись должна была гласить:

RewriteCond  %{REQUEST_URI}  ^/md/foo$

Это не требуется, если строка не обязательно начинается с начала. Это объясняет мои странные результаты.

Я отредактировал свой заголовок, чтобы показать, что это применимо специально для GoDaddy, в надежде, что это поможет кому-то другому.

 3
Author: Paddy Landau, 2015-02-09 20:16:57