2012-01-03 1 views
0

При использовании категорий в ExpressionEngine, Category URL Indicatorтриггер слово может быть установлен, чтобы загрузить категорию его {category_url_title}.ExpressionEngine RewriteRule RegEx Выдает ошибку 500

Я хотел бы удалить категорию «триггерное слово» из URL-адреса.

Вот то, что я до сих пор, с триггерного словом, установленным в «категории»:

RewriteRule /products/(.+)$ /products/category/$1 [QSA,L] 

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

Я уверен, что это что-то глупо, но по какой-то причине я не вижу своей ошибки. Что я делаю не так?


Обновление: Добавление ^ в начало RewriteRule зафиксировал ошибку 500.

RewriteRule ^/products/(.+)$ /products/category/$1 [QSA,L] 
+1

Я исправил это, добавив «^» – Roi

ответ

3

Это не безопасно. Возьмите:

/products/a 

Группа регулярное выражение соответствует a.

Он будет переписан:

/products/category/a 

который регулярное выражение соответствует снова (на этот раз, группа соответствует category/a). Угадайте, что произойдет.

Вы хотите /products/ с начала ввода , если она не сопровождается category/, что означает, что вы хотите отрицательный предпросмотр.Кроме того, QSA флаг не имеет смысла, вы не имеете строку запроса переписать (QSA означает Строка запроса Append):

RewriteRule ^/products/(?!category/)(.+) /products/category/$1 [L] 

Другой способ использовать его (и который я лично предпочитаю) является использовать RewriteCond перед правилом:

RewriteCond %{REQUEST_URI} ^/products/(?!category/) 
RewriteRule ^/products/(.*) /products/category/$1 [L] 
+0

+1 для использования lookahead здесь. – anubhava

+0

Мне это нравится! Я не понимал, что будет переписываться дважды - это имеет смысл! Спасибо! – Roi

0

Этот Apache RewriteRule должен делать эту работу для вас *:

RewriteCond %{REQUEST_URI} ^/products/(?!category/) 
RewriteRule ^/products/(.*) /products/category/$1 [L] 

с этим на месте, вам нужно жесткий код вашей категории Li НКС вручную:

{categories backspace="2"} 
    <a href="{site_name}/products/{category_url_title}">{category_name}</a>, 
{/categories} 

Какой бы выводить новые категории URL, вы хотите:

http://example.com/products/toys 

В противном случае, при использовании рекомендованного path variable при создании вашей категории ссылки:

{categories backspace="2"} 
    <a href="{path=products/index}">{category_name}</a>, 
{/categories} 

создаст ссылки с Category URL Indicator в URI:

http://example.com/products/C1 
http://example.com/products/category/toys 

Какие — в то время как вполне допустимы — бы создать canonicalization issues на вашем сайте, так как различные URL-адрес будут выглядеть как дублированный контент для поисковых систем.


* Кредит fge для блестящего правила mod_write.

Смежные вопросы