Основная помощь с условиями mod_rewrite - PullRequest
0 голосов
/ 04 июля 2011

Привет. Я новичок в mod_rewrite и мне было интересно, если это было возможно сделать следующее:

RewriteRule ^([^/]*)$ index.php?slug=$1

Это правило будет указывать только на index.php, но если бы я хотел создать другое правило, которое указывало бы определенный слаг на другой скрипт, т.е.

RewriteRule ^a-new-page$ different.php

Это не будет работать, потому что первое правило объявило все, что введено, должно указывать на индекс.

Есть ли способ заставить новое правило для этого конкретного слага?

1 Ответ

1 голос
/ 04 июля 2011

Да, это возможно - просто поместите такое конкретное правило перед универсальным / широким (порядок, в котором правила объявляются, имеет значение):

RewriteRule ^a-new-page$ different.php
RewriteRule ^([^/]*)$ index.php?slug=$1

Также обратите внимание на широкие правила - они могут войти в цикл перезаписи (после перезаписи новый URL переходит в следующую итерацию, и если правило не написано правильно, оно может войти в бесконечный цикл, который Apache должен будет принудительно прекратить и вместо этого ваш пользователь увидит страницу с ошибкой 500). Лучшее правило будет:

# specific rule
RewriteRule ^a-new-page$ different.php [L,QSA]

# broad rule (will be triggered if requested resource is not a file or directory) 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ index.php?slug=$1 [L,QSA]
  • [L] говорит Apache прекратить переписывать, если это правило соответствует
  • [QSA] указывает добавить строку запроса к новому URL-адресу (полезно, если у вас есть параметры URL-адреса: например, данные отслеживания, параметры страницы и т. Д.).

Полезная ссылка: http://httpd.apache.org/docs/current/rewrite/

...