Назад | Перейти на главную страницу

Нужна помощь с перезаписчиком URL-адресов .htaccess

Я пытаюсь сделать другую систему SEO с помощью PHP / .htaccess ...

Мне нужно применить следующие правила:

  1. Должны перехватывать все URL-адреса, которые не заканчиваются расширением (www.foo.com -> catch | www.foo.com/catch-me -> catch | www.foo.com/dont-catch.me -> не лови).
  2. Должны перехватывать все URL-адреса, которые заканчиваются на .php * (.php, .php4 ...) (это исключения из правила №1).
  3. Все правила должны применяться только в некоторых каталогах и не в своих подкаталогах (пока что / и / framework).
  4. Htaccess должен отправлять типизированный URL-адрес в значении GET, чтобы я мог работать с ним в PHP.

Может мне помочь какой-нибудь мастер по переписыванию модов?

Редактировать:

Хорошо, прочитав предложенные сообщения, я придумал это, но я думаю, что он застрял в цикле ... Кто-нибудь может помочь?

<IfModule mod_rewrite.c>
RewriteEngine On
# 1
RewriteCond %{REQUEST_FILENAME} !\.[^/]+$ [OR]
# 2
RewriteCond %{REQUEST_FILENAME} \.php.*$
# 4
RewriteRule ^(.*)$ http://localhost/seo-urls/seo-urls-mapper.php%3Frequested=$1?%{QUERY_STRING}
</IfModule>

Поскольку я хочу завершить это во время рождественских каникул, я добавляю награду :) Спасибо за вашу помощь и счастливых праздников!

Попробуйте это в качестве отправной точки:

RewriteEngine On

RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI}  !\.(.*)
RewriteCond %{REQUEST_URI}  !^/(framework|restricted)/
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]

RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI}  \.php.?$
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]

Первый набор правил:

  1. Не запускайте это правило, если uri Параметр GET установлен (в противном случае вы получите цикл при перенаправлении на целевой скрипт после добавления uri параметр)
  2. Если URI содержит . затем пропустите этот набор правил (вы можете создать более конкретное правило для определенных расширений, но это работает)
  3. Если URI находится в ограниченном каталоге, пропустите этот набор правил
  4. Перенаправить на index.php (вам может потребоваться изменить цель) и установите uri GET параметр

Второй набор правил:

  1. Если uri установлен параметр, пропустите этот набор правил, чтобы предотвратить зацикливание
  2. Продолжить, если запрошенный URI заканчивается на .php, .php4, или похожие (.php123 бы не быть перенаправленным)
  3. Перенаправить на index.php (может потребоваться изменить цель) и установите uri GET параметр

Чтобы собрать правила mod_rewrite, не нужен «мастер» - потратьте некоторое время на собственные эксперименты и прочтите руководство, рекомендованное jscott.

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