Создание правила mod_rewrite в файле htaccess - PullRequest
2 голосов
/ 22 февраля 2011

Я пытаюсь создать правило mod_rewrite для направления людей в подпапку.В настоящее время код выглядит следующим образом:

RewriteEngine On

RewriteCond %{HTTP_HOST} abcsite.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^!www\.abcsite\.*$ 
RewriteCond %{REQUEST_URI} !^/abc/.*$ 
RewriteRule (.*)$ /abc/$1 [L]

Перенаправление работает, если пользователь вводит www.abcsite.com, но не если он вводит abc.com.Есть ли что-то, чего мне не хватает или что нужно сделать по-другому, чтобы убедиться, что пользователь переходит в нужную папку (независимо от того, как он вводит URL)?

Примечание: файл htaccess, с которым я имею делоэто файл Joomla, поэтому все его содержимое относится к другому сайту Joomla.Я ценю помощь.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2011

В вашем втором состоянии есть паразит !.! перед шаблоном означает, что условие истинно, когда регулярное выражение не соответствует (как в третьем условии).! внутри шаблона - просто буквальный символ.

Условия хоста должны быть примерно такими:

RewriteCond %{HTTP_HOST} ^abcsite\.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^www\.abcsite\.com$ [NC]

И на самом деле их можно объединить в одно условие (примечание, нет [OR] здесь):

RewriteCond %{HTTP_HOST} ^(www\.)?abcsite\.com$ [NC]

Ваше третье условие предназначено для предотвращения циклов перенаправления (/foo/abc/foo/abc/abc/foo →…).Это говорит о том, что правило не применяется, если URL-адрес запроса начинается с /abc/.Тем не менее, фактическое перенаправление является внутренним перенаправлением: если пользователь обращается к abcsite.com/foo, сервер внутренне переписывает это в /webroot/abc/foo, но REQUEST_URI остается таким же, /foo.

Причина, по которой это не такне вызывает цикл перенаправления, поскольку он, скорее всего, переписывает правила в abc/.htaccess, которые переопределяют этот после завершения перенаправления.

Что следует проверить вместо этого в третьем условии, это путь, соответствующий правилу перезаписи:

RewriteCond $1 !^abc/
RewriteRule (.*) /abc/$1 [L]
0 голосов
/ 22 февраля 2011

Потому что у вас есть условия для этого.

RewriteCond %{HTTP_HOST} abcsite.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^!www\.abcsite\.*$ 
RewriteCond %{REQUEST_URI} !^/abc/.*$ 

Все вышеперечисленные правила будут проходить только его abcsite.com

Вы также добавите следующие правила, тогда это будет работать и для abc.com.

RewriteCond %{HTTP_HOST} abc.com$ [OR,NC]
RewriteCond %{HTTP_HOST} ^!www\.abc\.*$ 
RewriteCond %{REQUEST_URI} !^/abc/.*$ 
RewriteRule (.*)$ /abc/$1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...