Я пытаюсь создать еще одну систему SEO с помощью PHP/.htaccess...
Мне необходимо применить следующие правила:
- Необходимо перехватывать все URL-адреса, которые не заканчиваются расширением (www.foo.com --> catch | www.foo.com/catch-me --> catch | www.foo.com/dont-catch.me --> don't catch).
- Необходимо перехватить все URL-адреса, заканчивающиеся на .php* (.php, .php4...) (которые являются исключениями из правила №1).
- Все правила должны применяться только в некоторых каталогах инетв их подкаталогах (пока что / и /framework).
- 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>
Поскольку я хочу завершить это во время рождественских каникул, я добавляю вознаграждение :) Спасибо за помощь и счастливых праздников!
решение1
Попробуйте это в качестве отправной точки:
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]
Первый набор правил:
- Не запускайте это правило, если
uri
установлен параметр GET (иначе возникнет цикл при перенаправлении на целевой скрипт после добавленияuri
параметра) - Если URI содержит ,
.
то пропустите этот набор правил (возможно, вы захотите создать более конкретное правило для определенных расширений, но это работает) - Если URI находится в ограниченном каталоге, пропустите этот набор правил.
- Перенаправление
index.php
(возможно, вам придется изменить цель) и задатьuri
параметр GET
Второй набор правил:
- Если
uri
параметр установлен, пропустите этот набор правил, чтобы избежать зацикливания. - Продолжайте, если запрошенный URI заканчивается на
.php
,.php4
или на что-то подобное (.php123
будетнетбыть перенаправлены) - Перенаправление
index.php
(возможно, вам придется изменить цель) и задатьuri
параметр GET
Не нужно быть «волшебником», чтобы составить правила mod_rewrite — потратьте немного времени на самостоятельные эксперименты и прочтите руководство, рекомендованное jscott.
ДелатьЗадавайте все вопросы теоретического характера здесь, если вы хотите получить подробные объяснения (в отличие от практических вопросов, в которых создается впечатление, что отвечающие краудсорсингуют ваш проект, а не углубляют ваши знания).