переменные максимальной длины ограничения htaccess

#regex #apache #.htaccess #mod-rewrite

#регулярное выражение #apache #.htaccess #мод-перезапись

Вопрос:

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

 RewriteEngine on 
Options  FollowSymlinks
RewriteBase / 

RewriteRule pict/([a-z] )/([0-9] ) retpic.php?type=$1amp;id=$2 [L]

RewriteRule pc/(.*) pcs/$1 [L]

RewriteRule ^([a-z] )/([0-9] ) index.php?ln=$1amp;id=$2 [L]

RewriteCond %{REQUEST_URI} !=/index.php
RewriteCond %{REQUEST_URI} !=/retpic.php
RewriteCond %{REQUEST_URI} !^/pcs/.*$
RewriteCond %{REMOTE_HOST} !^11.11.11.11

RewriteRule . index.php [L]
  

retpic.php распределяет мои изображения, где:
([a-z] ) это двухбуквенный индикатор размера и типа изображения
([0-9] ) это 6-разрядный идентификатор того, какое изображение я хочу

возможно ли ограничить их длиной не более 2 и 6 символов?

то же самое относится и к моему индексу: ([a-z] ) индикатор языка из 2 букв (en, de, li, nl) ([0-9] ) представляет собой 6-разрядный идентификатор страницы, которую нужно отобразить.

папка pcs содержит мои файлы css и js в многоуровневой структуре папок и должна быть свободно доступна

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

Ответ №1:

Вы можете использовать конструкцию range regex {...} для принудительной длины:

 RewriteEngine on 
Options  FollowSymlinks
RewriteBase / 

RewriteRule pict/([a-z]{2})/([0-9]{6})/?$ retpic.php?type=$1amp;id=$2 [L,QSA]

RewriteRule pc/(.*)$ pcs/$1 [L]

RewriteRule ^([a-z]{2})/([0-9]{6})/?$ index.php?ln=$1amp;id=$2 [L,QSA]

RewriteCond %{REQUEST_URI} !=/index.php
RewriteCond %{REQUEST_URI} !=/retpic.php
RewriteCond %{REQUEST_URI} !^/pcs/.*$
RewriteCond %{REMOTE_HOST} !^11.11.11.11
RewriteRule . index.php [L]
  

Комментарии:

1. Отлично, что работает как шарм. только почему вы добавляете $ к pc /(.*)? и почему при использовании QSA у меня сложилось впечатление, что это в основном используется для тестирования?

2. Всегда пожалуйста. QSA флаг (Добавление строки запроса) сохраняет существующие параметры запроса при добавлении нового.