Htaccess RewriteRule под WordPress

Сайт WordPress в разработке. Цель состоит в том, чтобы взять то, что выглядит как постоянные ссылки (но не так), передать соответствующие биты на статическую страницу через параметры URL.

Прямой тест работы статических страниц (простите за незаконченный вывод):

http://test.cynical.ws/display-murphy/?cynical_id=_Computing's_7th_law

Общий URL для этой страницы должен быть:

http://test.cynical.ws/murphyism/_Computing's_7th_law

У меня есть RewriteRule, но оно не работает:

RewriteRule ^murphyism/(.*)$ display-murphy/?cynical_id=$1

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

Я пробовал различные флаги RewriteRule (например, [L]) без каких-либо изменений в поведении.

Вот полный файл htaccess:

RewriteEngine on

RewriteRule ^murphyism/(.*)$ display-murphy/?cynical_id=$1

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Попробуйте вот так: RewriteRule ^murphyism/(.*)$ display-murphy/?cynical_id=$1 [NC,R,L]

wp78de 21.05.2018 20:37

Ух ты! Это помогло. Большое спасибо. Что я упустил из комбинации флагов, которые устранили проблему?

user3277069 22.05.2018 21:13

Еще одно: как сохранить исходный URL-адрес в адресной строке браузера? Формат "slug" намного лучше для целей совместного использования, чем полный URL-адрес "display-murphy ...".

user3277069 22.05.2018 21:46

Конечно, я вставил это в свой ответ.

wp78de 22.05.2018 23:36
Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
0
4
99
1

Ответы 1

Что касается RewriteRule, как обсуждалось, используйте:

RewriteRule ^murphyism/(.*)$ display-murphy/?cynical_id=$1 [NE,R,L] 

Важной частью здесь является NE|noescape, поскольку целевой URL-адрес содержит фрагмент. Вам необходимо использовать флаг NE, чтобы избежать проблем с экранированием URL


Что касается перезаписи без перенаправления, для этого необходимо включить mod_proxy и mod_rewrite в httpd.conf Apache.

Тогда перезапись должна выглядеть так:

Options +FollowSymLinks -MultiViews 
RewriteEngine On
RewriteRule ^murphyism/(.*)$ display-murphy/?cynical_id=$1 [NC,NE,L]

Справка:

Спасибо и извините за поздний ответ. Похоже, что приведенный выше пример относится к другому сайту + условие (в основном удаление / en / из URL-адреса). Итак, догадавшись, я составил следующее. Ни оставшееся RewriteRule, ни закомментированное не работали. RewriteCond% {REQUEST_URI} ^ / murphyism $ RewriteRule ^ murphyism /(.*)$ display-murphy /? Cynical_id = $ 1 [NC, L] #RewriteRule ^ (. *) Display-murphy /? Cynical_id = $ 1 [NC, L ]

user3277069 28.05.2018 01:38

Извините, только что понял, что перепутал NC и NE. Обновленный ответ. Используйте новый браузер и режим инкогнито, чтобы попробовать обновленное правило.

wp78de 28.05.2018 22:03

Еще раз спасибо. 1) Это действительно сохраняет исходный URL-адрес в браузере (хотя кто-то указал, что флаг QSA делает то же самое). 2) Большая проблема остается в Wordpress. Он удаляет любые одинарные кавычки, что приводит к сбою поиска в базе данных. Я еще не нашел способа (кроме взлома основного кода Wordpress), чтобы он этого не делал.

user3277069 29.05.2018 22:57

Другие вопросы по теме