htaccess mod_rewrite для SEO URL неправильно переписывают

То, что я пытаюсь сделать, это иметь красивые URL. Я добился этого для случая, когда я хочу, чтобы вся строка указывала на один скрипт PHP. Я не буду.

Итак, это работает: example.com/login/1/2 => /index.php?go=login&do=1&msg=2

С помощью:

RewriteEngine on
RewriteBase /
RewriteRule ^([0-9a-zA-Z_-]+)/?$ /index.php?go=$1 [L,QSA]
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/?$ /index.php?go=$1&do=$2 [L,QSA]
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/?$ /index.php?go=$1&do=$2&q1=$3 [L,QSA]

Теперь скажем, я хочу example.com/webapp/1/2/3 => webapp.php?1=1&2=2&3=3

Добавив это ниже выше:

RewriteRule ^webapp/?$ /webapp.php [L,QSA]
RewriteRule ^webapp/([0-9a-zA-Z_-]+)/?$ /webapp.php?go=$1 [L,QSA]
RewriteRule ^webapp/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/?$ /webapp.php?go=$1&do=$2 [L,QSA]
RewriteRule ^webapp/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/?$ /webapp.php?go=$1&do=$2&q1=$3 [L,QSA]

Навигация к example.com/webapp перенаправляет на index.php каждый раз, удаляя любую строку запроса.

Если я закомментирую первый блок кода и перейду к example.com/webapp я получил webapp.php как я должен.

Я не получаю ошибок в любом журнале. Журнал доступа во время вызовов сообщает 302 в веб-приложение

Что я делаю неправильно?

2 ответа

Решение

добавив это ниже выше

Вы должны добавить это, прежде чем выше!

Ваши правила должны быть расположены в порядке специфичности. Сначала более конкретные правила, последние самые общие. Ваш первый блок правил содержит самые общие / универсальные правила, так что именно он перехватывает запрос и останавливает обработку.

Я не уверен, правильно ли вы поняли концепцию красивых URL: https://en.wikipedia.org/wiki/Semantic_URL То, что вы планируете делать, определенно не поможет вашему SEO. И вы не должны перенаправлять временно (302 перенаправление), но постоянно [R=301].

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