.htaccess и params
i digg в Интернете о правилах .htaccess и rewrite, которые мне нужно делать с моим сайтом.
я увидел то, что я не понимаю и хочу знать, что это значит
Мне интересно, какая разница между двумя регулярными выражениями, которые мне нужно использовать для моего сайта среди всех других, которые мне нужно использовать):
RewriteRule ^home$ mainpage.php?id=$1 [QSA]
и
RewriteRule ^home(/)?$ mainpage.php?id=$1 [L]
Я посмотрел на QSA и L, но что означает (/)
?
Ответы
Ответ 1
Выражение будет (/)?
not (/)
. Это означает слэш или нет в URL-адресе. Эти два URL-адреса отправятся в одно и то же место:
http://www.domain.com/home/
и
http://www.domain.com/home
Таким образом, косая черта необязательна. Таким образом, если бот или поисковая система помещает его, правило будет работать.
Вы можете переписать правила следующим образом:
RewriteRule ^home/?$ mainpage.php?id=$1 [L,QSA]
Кроме того, я видел, как вы сказали:
среди всех остальных мне нужно использовать
Если все ваши страницы попадают в один и тот же файл (в данном случае mainpage.php), вы можете создать одно правило, которое будет автоматически переписывать их вместо создания 10 или 15 правил (или более). Вы можете сделать это следующим образом:
RewriteEngine on
REwriteBase /
RewriteRule ^([a-z0-9\-_]+)/?$ mainpage.php?id=$1 [L,QSA]
Это правило будет использовать буквы, цифры, тире и подчёркивания как страницу.
Ответ 2
(/)?
означает "необязательная косая черта".
-
(/)
создает группу, содержащую/совпадающую между скобками. В этом случае, поскольку это один символ, скобки больше для захвата частей, чем что-либо еще. (Независимо от того, какие совпадения станут $1
, $2
и т.д., В зависимости от того, сколько групп захвата (наборов скобок) есть в шаблоне и где они находятся.)
Кстати, ваш первый RewriteRule не имеет большого смысла - поскольку нет группы для предоставления значения $1
, она, вероятно, всегда будет пустой. Во втором случае $1
будет либо пустым, либо косой чертой, в зависимости от соответствия подшаблона. home
будет переписано на mainpage.php?id=
, а home/
будет переписано на mainpage.php?id=/
.
-
?
означает "0 или 1 предыдущего атома". ( "Атомы", BTW, являются строительными блоками регулярного выражения.) В этом случае, поскольку предшествующий ему атом (/)
(что эффективно /
), ?
означает "0 или 1 слэши".