Intereting Posts
получить термины, которые имеют сообщение с настраиваемым типом сообщения между двумя значениями Простой Facebook Connect: токены доступа не найдены Как создать другую структуру ссылок для страниц и сообщений? Как разрешить гостям (незарегистрированным пользователям) и зарегистрированным пользователям участвовать в сообщениях? Как отобразить два раздела с произвольной записью, каждая из которых находится под их собственной категорией Многоузловой доступ к другому многоузловому Отключить дочернюю тему css на определенных страницах Более одного TinyMCE (wp_editor) с разными значениями $ settings ломается Добавить сортировку столбца для всех типов сообщений Запустить функцию после публикации сообщения Массовое пользовательское меню и Wp-Ecommerce Как сделать mysite.com/post-name/sub-post? Где WordPress делает запросы cURL? Как добавить опцию cURL Тестирование плагинов для Multisite Показать сообщения за день

Страница WP и подкаталог с тем же именем

У меня есть подкаталог в моей WP-установке под названием labs . Я также создал WP-страницу под названием labs . Когда пользователь mydomain.com/labs/ я хочу, чтобы они загружали страницу WP. Но вместо этого он загружает список каталогов labs .

Я прочитал несколько способов сделать это, если хочу, чтобы моя страница WP имела другое имя, чем имя моего каталога, но я этого действительно не хочу. Например, я хочу иметь:

 mydomain.com/ <-- WP Root mydomain.com/labs/ <-- Pretty WP page listing all of my projects mydomain.com/labs/project1/ <-- raw (ie no WP) web app mydomain.com/labs/project2/ <-- raw (ie no WP) web app 

Это возможно?

Следует также упомянуть, что WP установлен в корневом mydomain.com , поэтому /labs/ – это и страница WP, и подкаталог, который я создал вручную.


Решение . Я переименовал папку своих labs в projects и использовал следующий .htaccess.

 RewriteEngine On RewriteCond %{REQUEST_URI} labs/(.+)$ RewriteCond %{REQUEST_URI} !labs/(.+)/$ RewriteRule ^labs/(.+)$ http://mydomain.com/labs/$1/ [L] RewriteRule ^labs/(.+)$ projects/$1 [L] 

Я немного неясен, почему я должен был использовать

 RewriteRule ^labs/(.+)$ http://mydomain.com/labs/$1/ [L] 

а не просто

 RewriteRule ^labs/(.+)$ labs/$1/ [L] 

Но когда я использовал последний, он никогда не добавлял конечную косую черту.

Вам нужно будет сделать кое-что .htaccess-fu, чтобы получить то, что вы предлагаете работать.

 RewriteCond $1 ^/labs/(.+) RewriteRule ^/labs/(.*)$ /labs-folder/$1 [L] 

Это еще не проверено, но если вы поместите его перед правилами wordpress в свой файл htaccess, он переназначит URL-адреса, которые начинаются с / labs / to / labs-folder /, но если URL-адрес просто «/ labs /» на его своя.

Дайте мне знать, если это не сработает, и я отлажу его с вами.

Вы можете заменить «labs-folder» на любое имя папки, которое вы выберете, но по существу URL-адрес:

 http://example.com/labs/project1/ 

Будем действительно смотреть здесь:

 http://example.com/labs-folder/project1/ 

Вы не можете иметь как WP-страницу, так и каталог с тем же именем, за исключением случаев, когда вы также создаете /labs/index.php и делаете какой-то странный хакер.

Другим решением было бы переименовать каталог и выполнить некоторую хитрость .htaccess, чтобы файлы внутри каталога обслуживались в / labs / URL.

Я нашел (по крайней мере, на моем хостинге), что нет необходимости переименовывать конфликтующие каталоги. Вам нужно создать исключение для каждой страницы, которую вы хотите обработать WordPress, в соответствии с этими строками:

 RewriteCond %{REQUEST_FILENAME} /labs/$ [OR] RewriteCond %{REQUEST_FILENAME} /page2/$ [OR] RewriteCond %{REQUEST_FILENAME} /page2/page3/$ RewriteRule . /index.php [L] 

Эти правила в основном говорят серверу о передаче любых запросов, заканчивающихся в каталогах с этими именами, в /index.php, который является основным скриптом WordPress. (Предполагается, что WP находится в корневом каталоге). Чтобы предотвратить совпадение любых URL-адресов, заканчивающихся в / labs / и т. Д., Необходимо квалифицировать условия с достаточным количеством путей к этим каталогам на вашем сервере, чтобы сделать их уникальными. Здесь должен использоваться путь к серверу, потому что я сопоставляюсь с% {REQUEST_FILENAME}. Я полагаю, что% {REQUEST_URI} позволит вам совпадать с URL-адресом, но я не пробовал. Поэтому каждое условие становится чем-то вроде

 RewriteCond %{REQUEST_FILENAME} /path/to/html/labs/$ [OR] 

Кроме того, вам нужно иметь опцию [OR] в конце каждой строки RewriteCond EXCEPT последней.

Затем я вставил эти строки до того, как правила перезаписи создадут WordPress, чтобы проверить, существует ли каталог или файл. Здесь будет окончательный набор правил:

 # Modified WP rewrites <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} /path/to/html/labs/$ [OR] RewriteCond %{REQUEST_FILENAME} /path/to/html/page2/$ [OR] RewriteCond %{REQUEST_FILENAME} /path/to/html/page2/page3/$ RewriteRule . /index.php [L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . /index.php [L] </IfModule> 

Обратите внимание, что я удалил комментарий # BEGIN WordPress. Затем я сделал файл .htaccess недоступным для записи, чтобы WordPress не смог добавить свои правила обратно. Я не думаю, что эти шаги были необходимы. Если вы поместите новые правила над комментарием # BEGIN WordPress и заверните их в другие строки, чтобы включить механизм перезаписи, я думаю, что они все равно будут работать, но я не тестировал эту конфигурацию.

Я просто перенес старый статический сайт HTML в WordPress, и я пытался сохранить все загружаемые файлы в исходных каталогах со страниц, к которым они принадлежали. Эта настройка сделала возможным.

Надеюсь, это поможет кому-то!

(PS Где страница справки для синтаксиса уценки? Я искал около 15 минут и не мог найти ее …)

Ваш вопрос, кажется, несколько в одном 🙂

  1. вам не нужно создавать labs страницы, поскольку это домашний каталог вашей установки WordPress.

  2. если отображается список каталогов, я должен убедиться, что установлен WordPress правильно. Также есть файл .htaccess и, возможно, файл .htaccess в вашем основном каталоге ( mydomain.com ), вызывающий каталог, отображаемый в каталоге WordPress ( mydomain.com/labs/ )

  3. С помощью меню навигации вы можете настроить ссылки так, как вы хотите их настроить, поэтому project1 и project2 указывают на вещи вне WordPress, но вы должны убедиться, что вы не даете ничего в WordPress с теми же именами, и я думаю что вам нужно будет настроить подкаталоги в каталоге labs.

Измените файл .htaccess без переименования папки:

 #a request finished with '/labs/' RewriteCond %{REQUEST_FILENAME} /labs/?$ #processed by wordpress #change index.php prefix according to your original wordpress .htacccess RewriteRule . index.php [L] #put before the other RewriteConds