могу ли я как-то оптимизировать это, чтобы не писать эти две строки для каждого перенаправления, которое я пытаюсь сделать?
Вы не можете сделать это только в .htaccess
, потому что нет Похоже, что это не какой-либо «шаблон», который сопоставляет этот числовой c идентификатор с целевым URL.
(Если у вас есть доступ к конфигурации сервера, вы можете создать RewriteMap
, который содержит сопоставление идентификатора по URL-адресу. Затем его можно вызвать из .htaccess
. Но я предполагаю, что у вас нет доступа к конфигурации сервера здесь?)
Могу ли я, может быть, вставить хотя бы все номера страниц (20 и 30) которые нужно перенаправить на ту же целевую страницу с использованием массива?
Вы, конечно, можете это сделать. Либо с использованием чередования (например, (20|30|40)
) как @CBroe, упомянутого в комментариях, либо с использованием другого шаблона регулярного выражения. например. [1-4]0
соответствует 10
, 20
, 30
и 40
.
Однако вместо «перенаправления», вероятно, предпочтительнее внутренне переписать запрос к ту же целевую страницу, а затем используйте серверный сценарий для поиска идентификатора и выполнения соответствующего внешнего перенаправления - если перенаправление требуется.
Например:
RewriteCond %{QUERY_STRING} ^p=(10|20|30|40)$
RewriteRule ^$ redirect-handler.script [L]
Обратите внимание, что NC
не требуется, если вам действительно не нужно соответствовать как p
, так и P
?
Затем в /redirect-handler.script
вы сохраняете массив всех идентификаторов и URL-адресов, которые должны быть перенаправлены, и выдаете внешнее перенаправление 3xx в зависимости от ситуации.
В приведенном выше примере строка запроса, например. p=10
передается в целевой сценарий по умолчанию - его не нужно явно передавать, если вы в порядке, используя то же имя параметра URL-адреса в целевом сценарии. Однако, если вы хотите явно передать значение (возможно, с другим именем параметра, например id
), вы можете изменить приведенное выше правило следующим образом:
RewriteCond %{QUERY_STRING} ^p=(10|20|30|40)$
RewriteRule ^$ redirect-handler.script?id=%1 [L]
Где %1
- это обратная ссылка на захваченный подшаблон в последнем совпавшем CondPattern . ie. Все, что соответствует (10|20|30|40)
.
Обратите внимание, что это соответствует запросам формы example.com/?p=10
, как обозначено RewriteRule
шаблоном ^$
(пустой URL-путь).