Правила mod_rewrite, как проверить «не строку»? - PullRequest
1 голос
/ 31 августа 2009

У меня есть блог, установленный на www.foo.com/wp/, и я хочу, чтобы все запросы на любую страницу, которая не начинается с / wp /, были перенаправлены на www.foo.com/wp/ (без сохранение URL).

например:.

www.foo.com/bar/baz/hello.gif     > www.foo.com/wp/

Кроме того, в то же время мне нужно, чтобы URL имел www. добавлено, если это не так (что может привести к путанице в моих правилах)

На данный момент у меня есть:

RewriteCond %{HTTP_HOST}      !^www.foo.com [NC]
RewriteCond %{HTTP_HOST}      !^$
RewriteRule ^/(.*)            http://www.foo.com/$1 [R=permanent]

RewriteRule ^(?!wp)/(.*)$               http://%{HTTP_HOST}/wp/($2) [R=permanent]

Но я думаю, что это в настоящее время полностью сломано.

Помощь очень ценится.

Ответы [ 2 ]

1 голос
/ 31 августа 2009
RewriteCond %{HTTP_HOST}      !^www.foo.com [NC]
RewriteCond %{HTTP_HOST}      !^$
RewriteRule (.*)              http://www.foo.com/$1 [R=permanent,L]

RewriteRule ^(?!wp/)(.*)      http://%{HTTP_HOST}/wp/$1 [R=permanent]
  1. Часть пути сопоставляемого URL-адреса никогда не имеет косой черты, и вам не нужно привязывать .*.
  2. L изменено, предотвращает продолжение переписывания после вашего первого перенаправления.
  3. Negative-lookbehind (?!) не является конструкцией захвата, и вы заменили в захваченных шаблонах, написав $1, а не ($1).

Редактировать: По-видимому, для OP последнее правило не работает, не исключая случаев, начинающихся с /wp/, что не имеет смысла для меня, кроме как. Вот попытка обходного пути:

RewriteCond %{HTTP_HOST}      !^www.foo.com [NC]
RewriteCond %{HTTP_HOST}      !^$
RewriteRule (.*)              http://www.foo.com/$1 [R=permanent,L]

RewriteCond %{REQUEST_URI}    !^/wp/
RewriteRule (.*)              http://%{HTTP_HOST}/wp/$1 [R=permanent]
0 голосов
/ 31 августа 2009

Попробуйте эти правила:

RewriteCond %{HTTP_HOST} !^www.exmaple.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^ http://www.example.com%{REQUEST_URI} [R=301,L]

RewriteCond %{THE_REQUEST} ^GET\ /wp/
RewriteRule ^wp/(.*) /$1 [R=301,L]

RewriteRule !^wp/ wp%{REQUEST_URI} [L]

Первое правило относится к имени хоста. Во-вторых, внешнее удаление префикса пути /wp. И третье - снова добавить префикс для внутреннего перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...