Остановите mod_rewrite, возвращающий REQUEST_URI, когда (. *) Пусто - PullRequest
0 голосов
/ 18 августа 2011
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^mocks/site/(.*)$ http://thelivewebsite.com/$1 [R=301,L]

Это содержимое моего файла htaccess.

Файл htaccess находится в корневом каталоге учетной записи хостинга, и я просто хочу перенаправить каталог mocks/site/ в новый домен (с или безлюбые дополнительные каталоги).

например: если кто-то переходит на http://mywebsite.com/mocks/site, то ему необходимо перенаправить на http://thelivewebsite.com.Если они переходят на http://mywebsite.com/mocks/site/another/directory, его необходимо перенаправить на http://thelivewebsite.com/another/directory.Я надеюсь, что это имеет смысл.

Так что проблема, с которой я столкнулся, заключается в том, что приведенный выше код htaccess, кажется, работает довольно хорошо, когда что-то есть после mocks/site/, однако, когда после этого ничего не происходит, тогда $1в редиректе, кажется, ссылается на весь REQUEST_URI (например: mocks/site/, а не ничего - поскольку после него ничего нет).

Я не знаю, как это остановить.Я думал об использовании RewriteCond, но я не уверен, что там использовать.Я не могу найти ничего, что помогло бы мне определить, есть ли что-то после mocks/site/ или нет.

Любая помощь будет высоко ценится.

Спасибо.

1 Ответ

1 голос
/ 18 августа 2011

Это очень странное поведение - никогда не видел ничего подобного. Поэтому я думаю, что это может быть что-то еще ( другое правило где-то - на старом или даже новом сайте). Я рекомендую включить отладку перезаписи (RewriteLogLevel 9) и проверить журнал перезаписи (это , если вы можете изменить файл конфигурации Apache / определение виртуального хоста).

В любом случае, попробуйте эту комбинацию :

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^mocks/site/$ http://thelivewebsite.com/ [R=301,L]
RewriteRule ^mocks/site/(.+)$ http://thelivewebsite.com/$1 [R=301,L]

Он будет выполнять сопоставление / перенаправление в 2 этапа: первое правило предназначено для точного соответствия каталога (поэтому $1 вообще не используется), а второе будет работать, если после /mocks/site/.

будет хотя бы один символ

В качестве альтернативы (Apache docs даже рекомендует этот) использовать директиву Redirect (для таких простых перенаправлений вообще не требуется *1022*):

Redirect 301 /mocks/site/ http://thelivewebsite.com/
...