ExpressionEngine RewriteRule RegEx выбрасывает 500 ошибок - PullRequest
0 голосов
/ 03 января 2012

При использовании категорий в ExpressionEngine, Индикатор URL категории слово триггера может быть установлено для загрузки категории по ее {category_url_title}.

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

Вот то, что я имею до сих пор, со словом триггера, установленным на "category":

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

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

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


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

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

Ответы [ 2 ]

3 голосов
/ 03 января 2012

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

/products/a

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

Будет переписано:

/products/category/a

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

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

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

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

RewriteCond %{REQUEST_URI} ^/products/(?!category/)
RewriteRule ^/products/(.*) /products/category/$1 [L]
0 голосов
/ 03 января 2012

Этот Apache RewriteRule должен выполнить всю работу за вас *:

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

С этим вам потребуется вручную жестко кодировать ссылки вашей категории:

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

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

http://example.com/products/toys

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

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

Создаст ссылкис указателем URL-адреса категории в URI:

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

Что - , в то время как совершенно верно - создаст проблем канонизации на вашем сайте сразличные URL-адреса будут отображаться как дублирующий контент для поисковых систем.


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

...