Куртис, спасибо за дополнительную информацию.Намного проще дать конкретный ответ на это.
Мой первый комментарий заключается в том, что вам нужно выделить в своем мышлении пространство URI - это то, какие URI вы хотите, чтобы ваши пользователи вводили в их браузер, - и пространство файловой системы - какие физические файлы вы хотите отобразитьк.Некоторые из ваших отображений - URI-> URI, а некоторые - URI-> FS
Например, вы хотите выполнить постоянное перенаправление с www.kurtiskronk.com / * на kurtiskronk.com / *.Предполагая, что вы только сервер базовых и www поддоменов из этого дерева, тогда эта пара cond / rule должна идти первой, так что вы можете предположить, что все другие правила относятся только к kurtiskronk.com .
Далее необходимо просмотреть документацию RewiteBase .Файлы .htaccess
обрабатываются в том, что Apache называет контекстом Per-Directory , и эта директива сообщает механизму перезаписи, что следует считать базой URI, попавшей в этот каталог, и файлом .htaccess.Из того, что я понял, ваш блог установлен в docroot / blog (в файловой системе, и вы хотите попасть в каталог, набрав http://kurtiskronk.com/blog/, но этот файл .htaccess предназначен для корневой папки - то естьбаза должна быть (это идет до правила отображения www)
DirectorySlash On
DirectoryIndex index.php
RewriteBase /
#301 redirect to domain without 'www.'
RewriteCond %{HTTP_HOST} ^www\.kurtiskronk\.com$ [NC]
RewriteRule ^(.*)$ http://kurtiskronk.com/$1 [R=301,NC]
Вы можете добавить некоторые дампы полей, ищите REDIRECT _ * в таблице Server или Environment в phpinfo O / Pчтобы проверить, являются ли они разумными. Например:
RewriteWrite ^(.*)$ - \
[E=TESTDR:%{DOCUMENT_ROOT}/pages/$1.php,E=TESTPDR:%{DOCUMENT_ROOT}/pages/$1.php]
Ваше следующее правило: если файл существует в подкаталоге pages , используйте его:
RewriteCond %{DOCUMENT_ROOT}/pages/$1 -f
RewriteRule ^(.*)$ pages/$1 [NS,L]
[Обратите внимание, что некоторые сайты общих служб не настраивают DOCUMENT_ROOT должным образом для механизма перезаписи, поэтому вам может потребоваться запустить скрипт variableinfo (<?php phpinfo(INFO_ENVIRONMENT | INFO_VARIABLES);
, чтобы посмотреть, настраивает ли он альтернативы. На вашем сайте вы должны использовать %{ENV:PHP_DOCUMENT_ROOT}
вместо этого.]
Следующее правило: если файл существует, но с расширением .php в подкаталоге pages , используйте его:
RewriteCond %{DOCUMENT_ROOT}/pages/$1.php -f
RewriteRule ^(.*)$ pages/$1.php [NS,L]
Теперь перенаправьтелюбой блог ссылки на блog подкаталог, если только URI не сопоставлен с реальным файлом (например, таблицами стилей блога и вашими загрузками).
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^blog/ blog/index.php [L]
Сложность здесь заключается в том, что WP может использовать плохо документированный вызов функции Apache.может выступать в качестве псевдо-каталога, поэтому http://kurtiskronk.com/blog/tag/downtown/ перенаправляется на docroot/blog/index.php/tag/downtown/
, который затем выполняется `docroot/blog/index.php
с использованием /tag/downtown/
в качестве PATH_INFO .Но это один из комментариев для экспертов Wordpress.Если это последнее правило не работает, попробуйте:
RewriteRule ^blog/(.*) blog/index.php/$1 [L]
PS.Мне нравится ваш сайт.Хотелось бы мне снова быть таким молодым: (
Постскриптум
Когда вы говорите "это не работает", что не так с этим .htaccess
?
http://kurtiskronk.com/phpinfo
, http://kurtiskronk.com/phpinfo.php
, http://kurtiskronk.comblog/tag/downtown/
Просто эти правила работают для этих тестов (с заменой домена) на моем. (Одним из способов является перемещение или копирование вышеуказанного variableinfo.php
в различные подкаталоги. При необходимости временно переименуйте index.php, скажем, в index.php.keep, и скопируйте variableinfo.php
в файл index.php. ВыТеперь вы можете ввести различные тестовые шаблоны URI и посмотреть, что происходит. Найдите поля REDIRECT _ * в выводе phpinfo, а SCRIPT_NAME сообщит вам, что выполняется.добавьте дополнительные флаги {E = ...] для проверки результатов различных шаблонов. (Помните, что они присваиваются только в том случае, если правило совпадает.
Наконец, обратите внимание на указанные выше изменения, особенно дополнительные флаги NS. Для некоторыхпричина, по которой mod_rewrite входил непосредственно в подзапрос, что привело к redirect:
сбрасывается в файл шаблона.Я взглянул на код Apache, и это внутренняя ошибка, указывающая на необходимость дальнейшего перенаправления (которое затем заменяет это или отменяет).Однако эта открытая ошибка указывает на то, что эту подпорку можно пропустить в подзапросах, и, возможно, именно это и происходит здесь.Конечно, добавление флешки NS устранило проблему в моей тестовой среде.
PS. Обратите внимание на добавленную явную директиву DirectoryIndex
, а также на то, что пока http://kurtiskronk.com
будет запускать корень index.php
, явная версия /index.php
будет запускать версию на страницах, потому что это то, что говорится в ваших правилах.