.htaccess переписать все символы - PullRequest
2 голосов
/ 21 января 2011

Какой шаблон мне нужен, чтобы переписать все символы в запрошенном URL?Я попытался:

RewriteRule ^([a-z\-_0-9]+)/([^/.]+)$ index.php?engine=$1&q=$2 [NC,L]

Но точки . не распознаются.

Ответы [ 3 ]

10 голосов
/ 21 января 2011

(. *) Будет соответствовать всем символам.Это все, что вам нужно.

2 голосов
/ 21 января 2011

Чтобы соответствовать всему , вы можете просто использовать: ^(.+)/(.+)/?$ (с необязательным завершающим слешем)

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

[a-zA-Z0-9_-]

или, используя экранирование символов:

[\w\d_-]

Ваш второй набор скобок в настоящее время специально исключает точку и косую черту, сопоставляявсе остальные.

Если данные вашего приложения четко определены, вы можете использовать определенные классы символов и 404 для всех других данных.Если вы хотите перенаправить одеяло, вам следует исправить следующее:

RewriteRule ^(.+)/(.+)/?$ index.php?engine=$1&q=$2 [NC,L]
0 голосов
/ 27 августа 2011

Это точно, потому что изображения и даже favicon.ico будут «переписаны» в ваш index.php вместо этого, попробуйте эти правила за исключением «статических» файлов и каталогов. Этот код будет читать все, что существует на самом деле, если нет, он перенаправит его в ваш index.php для обработки:

RewriteEngine   On
RewriteBase     /
RewriteCond     %{REQUEST_FILENAME} !-f
RewriteCond     %{REQUEST_FILENAME} !-d
#RewriteCond    %{HTTP_HOST}    ^(^.*)\.mydomain.com$
RewriteRule     .               /index.php              [L]

Еще один способ исключить «определенные» файлы или каталоги - использовать строку вроде:

RewriteCond %{REQUEST_URI} !^(/index\.php|/img|/js|/css|/robots\.txt|/favicon\.ico)
...