htaccess переписать "... / pages / about.php" в "... / about" - PullRequest
0 голосов
/ 01 февраля 2012

Я искал и нашел много вопросов на этом сайте и в других местах, которые очень похожи, но я попытался реализовать и изменить все найденные предложения, но ни один из них не работает.Я понимаю, что это очень простой вопрос, и я крайне разочарован, потому что ничего, что я пытаюсь, не работает.

С учетом сказанного ... Я пытаюсь организовать свои страницы контента в kurtiskronk.com/pages/ ... (например, kurtiskronk.com/pages/about.php)

Что я хочу сделать, так это сделать так, чтобы я мог просто ссылаться на kurtiskronk.com/about ... Итак, как мне поступитьпо поводу удаления "страниц /" и ".php"?У меня нет тонны контентных страниц, поэтому нет ничего особенного, если мне придется указывать для каждой страницы, хотя что-то динамическое было бы удобно.

ПРИМЕЧАНИЯ. Я использую хостинг Rackspace Cloud и WordPress.установлен в / блог.Мой phpinfo () можно увидеть по адресу http://kurtiskronk.com/pages/phpinfo.php

Это мой существующий файл .htaccess (в корне)

php_value register_globals "on"
Options +FollowSymLinks
RewriteEngine On

#301 redirect to domain without 'www.'
RewriteCond %{HTTP_HOST} ^www\.kurtiskronk\.com$ [NC]
RewriteRule ^(.*)$ http://kurtiskronk.com/$1 [R=301,NC]
RewriteBase /

RewriteCond %{ENV:PHP_DOCUMENT_ROOT}/pages/$1  -f
RewriteRule ^(.*)$     pages/$1  [L]

RewriteCond %{ENV:PHP_DOCUMENT_ROOT}/pages/$1.php  -f
RewriteRule ^(.*)$     pages/$1.php  [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^blog/ blog/index.php [L]

# PHP - MAIL
php_value mail.force_extra_parameters -kurtis@kurtiskronk.com

Я протестировал, и перезапись работает со строкой ниже (/примерно как URL вызывает файл /pages/about.php), но затем на домашней странице выдается 500 внутренняя ошибка сервера:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /pages/$1.php [L]

Так что я все еще в той же лодке, что и раньше, и какпоследующий, возможно, более сложный вопрос, если вы перейдете к http://kurtiskronk.com/weddings Я использую SlideShowPro (flash) с директором SSP (самостоятельно размещенный) в качестве серверной части для него.Когда создается новое изображение, после / weddings добавляется следующее ... "# id = album-152 & num = content-9698"

В портфолио есть четыре раздела

# Homepage (kurtiskronk.com) id=album-148 ($id is constant for this section)
# Weddings (/weddings) id=album-152 ($id is constant for this section)
# Portraits (/portraits) id=album-151 ($id is constant for this section)
# Commercial (/commercial) id=album-150 ($id is constant for this section)

Если предположить, что kurtiskronk.com/weddings успешно переписывают, ничего не нарушая, как мы можем сделать общий URL-адрес более чистым kurtiskronk.com/weddings/9698, так как $ num - это единственное, что изменится в данном разделе?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2012

Вот простое решение.Вы можете использовать это apache conf file (s) или в .htaccess (проще настроить, когда вы пытаетесь).

mod_rewrite должен быть включен.

Например, используйте .htaccessв вашем DocumentRoot с:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /pages/$1.php [L]

Он будет перенаправлен / примерно на /pages/about.php и любую другую страницу.Часть «RewriteCond» предназначена для авторизации доступа к существующему файлу (например: если у вас был файл «about» в корне вашего сайта, он будет обслуживаться вместо перенаправления на /pages/about.php).

0 голосов
/ 01 февраля 2012

Куртис, спасибо за дополнительную информацию.Намного проще дать конкретный ответ на это.

Мой первый комментарий заключается в том, что вам нужно выделить в своем мышлении пространство 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?

  1. http://kurtiskronk.com/phpinfo,
  2. http://kurtiskronk.com/phpinfo.php,
  3. 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 будет запускать версию на страницах, потому что это то, что говорится в ваших правилах.

0 голосов
/ 01 февраля 2012
Options +FollowSymLinks
RewriteEngine On
RewriteRule /([0-9]+)$ /pages/$1.php [L]

Поместите что-то подобное в ваш файл .htaccess. Я думаю, это то, что вы хотите. Juest редирект с простого URL на более длинный URL.

...