.htaccess: Перенаправить все запросы на подкаталог, за исключением случаев, когда существует точный каталог

Любой запрос к www.example. com / * необходимо перенаправить на www.example.com/blog / *

Если нет www. префикс, добавь его.

Важно, что если существует какой-либо каталог, соответствующий URI запроса, не перенаправляйте.

Пример:

(www.) Example.com/ -> www.example .com / blog / кроме ===

Как выполнить код .htaccess, следуя приведенным выше 3 условиям? Пожалуйста помоги!

Как выполнить код .htaccess в соответствии с вышеуказанными 3 условиями? Пожалуйста помоги!

Как выполнить код .htaccess в соответствии с вышеуказанными 3 условиями? Пожалуйста помоги! Спасибо; -)

6
задан Tim Stone 21 August 2010 в 22:39
поделиться

1 ответ

Это должно сделать то, что вы хотели. Я также добавил «не перенаправлять, если этот файл существует», так как я не был уверен, что было в ваших существующих каталогах. Вы можете попробовать удалить его, вынув второй RewriteCond , если он вам не нужен, но я думаю, что в некоторой степени это, вероятно, необходимо.

RewriteEngine On

# Check if the requested path is not a real file or a
# real directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# If the current request doesn't start with "blog", and
# it's not a real file or directory based on the above
# conditions, add "blog" to the front of the request, and
# mark an environment variable that indicates we'll need
# to redirect
RewriteRule !^blog blog%{REQUEST_URI} [E=CHANGED:TRUE]

# Check if the host doesn't start with "www.", or if we've
# marked the change variable above, since in either of those
# cases we need to perform a redirection (We do it this way,
# since we'll at most send one redirect back to the client,
# instead of the potential two we might send if we didn't
# combine the checks)
RewriteCond %{HTTP_HOST}  !^www\. [OR]
RewriteCond %{ENV:CHANGED} =TRUE
# Capture the non-"www." part of the host, regardless of
# whether or not the "www." is there
RewriteCond %{HTTP_HOST}   ^(www\.)?(.*)$
# Redirect anything to the corrected URL, using the
# backreference from the above condition, and the entirety of
# the requested path (possibly modified by the above RewriteRule)
RewriteRule ^.*$   http://www.%2/$0 [R=301,L]
12
ответ дан 9 December 2019 в 20:38
поделиться