Правило .htaccess для удаления расширения скрипта и обработки виртуальных каталогов в переменных - PullRequest
0 голосов
/ 11 февраля 2012

Я ищу правило .htaccess для следующей ситуации. Я нашел фрагменты того, что я ищу на этом сайте, но у меня нет опыта, чтобы правильно их собрать. Правило .htaccess будет обрабатывать следующие сценарии.

Первые два примера по умолчанию уже работают с DirectoryIndex, но я включил их, чтобы убедиться, что они все еще будут работать.

/
 -> /index.php

/home
 -> /home/index.php

/home/hello
 -> /home/hello.php

/home/hello/there
 -> /home/hello.php?var1=there

/home/hello/there/again
 -> /home/hello.php?var1=there&var2=again

Дополнительно, трейлинг / должен быть необязательным для каждого сценария.

Наконец, запросы на изображения или другие файлы должны по-прежнему обрабатываться правильно. При необходимости я могу поместить все, что не соответствует этому правилу, в папку, например /assets.

Пока что

RewriteRule ^([^/]+)/([^/]+)/? /$1/$2.php [NC] 

работает для / home / hello -> /home/hello.php

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/? /$1/$2.php?var1=$3 [NC]

работает для / home / hello / there -> /home/hello.php?var1=there и

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/? /$1/$2.php?var1=$3&var2=$4 [NC]

работает для / home / hello / there / again -> /home/hello.php?var1=there&var2=again

но мне еще предстоит заставить их хорошо играть вместе, а также опустить каталог для изображений и других ресурсов.

Большое спасибо за любые рекомендации.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012
Options       -MultiViews

RewriteEngine On
RewriteBase   /

DirectoryIndex index.php

RewriteCond   %{SCRIPT_FILENAME} -f       [OR]
RewriteCond   %{SCRIPT_FILENAME} -d
RewriteRule   ^                  -                                  [L]

RewriteRule   ^(.*?)/(\w+)/(.*?)/(.*?)/?  $1/$2.php?var1=$3&var2=$4 [L,QSA]
RewriteRule   ^(.*?)/(\w+)/(.*?)/?        $1/$2.php?var1=$3         [L,QSA]

RewriteCond   %{SCRIPT_FILENAME} !-d
RewriteRule   ^(.*?)/(\w+)/?              $1/$2.php                 [L]

Оценка каждого Справочника является итерационной, поэтому вам нужны критерии остановки. Это то, что делает правило 1.

Директива index каталога обрабатывает добавления index.php.

Правило 2-4 Сделайте свое SEO, чтобы получить отображение. Обратите внимание, что я изменил параметр 2, чтобы соответствовать любой строке слова.

. +? это не жадный матч. Остановится на первом /

0 голосов
/ 11 февраля 2012

Я думаю, я бы сам создал другие правила. В обратном порядке того, что вы перечислили, чтобы захватить. Так что если вы можете захватить 2 переменные, сделайте это сначала, затем попробуйте 1 переменную, затем просто страницу и т. Д.

Вот кое-что, что может помочь http://martinmelin.se/rewrite-rule-tester/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...