Apache мод переписать - PullRequest
       20

Apache мод переписать

0 голосов
/ 31 августа 2011

У меня есть 2 правила, установленные в .htaccess

RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ page.php?name=$1&do=$2&newstitle=$3 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ page.php?name=$1&do=$2&cattitle=$3 [L]

, и вот как я называю URL:

www.domain.com/My-Page/news/News-Title.html
www.domain.com/My-Page/category/Category-Title.html

и без переписывания модов:

www.domain.com/page.php?name=My-Page&do=news&newstitle=News-Title
www.domain.com/page.php?name=My-Page&do=category&cattitle=Category-Title

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

Как этого добиться, если оба правила работают.Я знаю, что чего-то не хватает, но мой опыт ограничен, когда дело доходит до mod_rewrite.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 31 августа 2011

Оба правила не похожи, они идентичны, поэтому всегда будет делать первое.

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

RewriteRule ^([^/]*)/news/([^/]*)\.html$ page.php?name=$1&do=news&newstitle=$2 [L]
RewriteRule ^([^/]*)/category/([^/]*)\.html$ page.php?name=$1&do=category&cattitle=$2 [L]

Вам нужен какой-то способ их дифференцировать. Это должно сделать это довольно просто.

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

Просто чтобы указать, вы могли бы написать это:

RewriteRule ^(.+)/news/(.+)\.html$ page.php?name=$1&do=news&newstitle=$2 [L]

Мое добавленное предпочтение - удалить .html:

RewriteRule ^(.+)/news/(.+)$ page.php?name=$1&do=news&newstitle=$2 [L]

Мне не нравится выставлять серверные технологии каким-либо образом, и HTML не добавляет ничего, чего мы еще не знаем о сайте.

Лично я использую аналогичную систему:

RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

URL взломан index.php в такой формат:

http://www.example.com/<controller>/<arg1>/<arg2>

Таким образом, с помощью одного оператора перезаписи я говорю, куда идти, и контроллер возвращает соответствующий вывод. Мне никогда не придется обновлять .htaccess после этого. Если мне нужен новый функционал, я пишу новый контроллер. Просто на что посмотреть.

...