mod_rewrite, эквивалентный правилу RedirectMatch - PullRequest
1 голос
/ 12 ноября 2011

У меня есть правило RedirectMatch в моем файле .htaccess, которое работает нормально, но у меня возникают проблемы при создании сопоставимого правила с использованием mod_rewrite.

Моя цель - получить этот URL: mysite.com/что-нибудь / печать показать эту страницу: mysite.com/anything?view=print.

Правило, которое работает для перенаправления, таково:

 RedirectMatch 301 ^(.*)/print/?$ http://mysite.com/$1?view=print

Но теперь я бы хотел изменитьэто из видимого перенаправления 301 в "невидимое" переписывание с использованием mod_rewrite.Я пробовал много разных вариантов (с RewriteBase и без), и ни один из них не работал:

 RewriteEngine On
 RewriteBase /
 RewriteRule ^(.*)/print/? $1?view=print

Что я делаю не так?Mod_rewrite определенно включен, и в том же файле .htaccess есть действующие правила mod_rewrite на основе Wordpress.


ОБНОВЛЕНИЕ

Используя советы @Nathan, ятеперь есть это.Тем не менее, я все равно получаю 404 при посещении mypost / print.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*)/print/?$ /index.php/$1?view=print [L]

Когда я добавляю / print / к постоянной ссылке, плагин WP_Debug указывает на следующее:

Запрос: myposttype/mypost/print

Строка запроса: attachment=print

Соответствующее правило перезаписи: myposttype/[^/]+/([^/]+)/?$

Совпадающий запрос на переписывание: attachment=print

Ответы [ 2 ]

2 голосов
/ 13 ноября 2011

Если у вас есть типичные правила wordpress в файле htaccess, ваши правила должны предшествовать блоку # BEGIN WordPress. В противном случае правила WordPress остановят сопоставление при переписывании до вызова ваших правил.

Кроме того, вы должны добавить $ после шаблона регулярных выражений, если вы не хотите совпадать с чем-то вроде: http://domain.com/page/print/something/else/here

Наконец, чтобы Wordpress распознал изменение URL-адреса без перенаправления страницы, вам нужно добавить URL-адрес к index.php/, чтобы Wordpress использовал постоянные ссылки для информации о пути.

1011 * Е.Г. *

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*)/print/?$ /index.php/$1?view=print [L]

# 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
1 голос
/ 12 ноября 2011
RewriteEngine on
RewriteRule ^(.*)/print/$ /$1?view=print [L]

или

RewriteRule ^(.*)/print$ /$1?view=print [L]

без "/" в конце строки URL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...