2013-03-22 5 views
3

Как я могу сделать перенаправление подстановки в файле .htaccess?Перенаправление через .htaccess с помощью подстановочного знака

Я попытался использовать следующее, но * не работает по какой-либо причине.

redirect 301 /threads/*.343/ http://myotherdomain.com/threads/*.343/

Я не могу использовать mod_rewrite, потому что у меня 7000 этих переадресаций, что мне нужно делать, и, по-видимому, когда я попытался около половины тех, мой сервер выбросил ошибку в 500 расконфигурации.

Так что кажется, что запись 7000 строк вышеупомянутого кода как-то менее интенсивна.

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

ответ

1

Вам не нужно 7000 отдельных правил перезаписи, просто использовать RewriteMap

1 - Сначала создайте текстовый файл со всеми 7000 выбранных идентификаторов в в 2 колонки, как это:

343 343 
349 349 
518 518 

2 - Тогда определить RewriteMap в httpd.cond так:

RewriteMap idmap txt:/path/to/file/map.txt 

3 - а затем включить mod_rewrite и .htaccess через httpd.conf и й ан поместить этот код в .htaccess под DOCUMENT_ROOT каталоге:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^threads/(.*)$ http://myotherdomain.com/threads/${idmap:$1} [L,NC,R=301] 
+0

У меня 7000 разных идентификаторов, цифры в конце кода URL. Поэтому мне нужно написать 7000 строк. Если я выражу это в mod_rewrite, как показано ниже. 'RewriteRule^threads/[^ \.] + \. (343 | 225 | 435 | 677 | 787 | 89 | 764 | 865 | 934)/(. *) $ Http://www.example2.com/ thread/$ 1/$ 2 [R = 301, L] ' ^ Проблема с этим кодом заключается в том, что наличие даже 3500 идентификаторов, не говоря уже о 7000, приводит к тому, что мой сайт выдает ошибку неправильной конфигурации сервера (500) – Maaz

+0

и в этом случае:' RewriteRule^(threads/[^.] + \. [0-9] +) /? $ http://myotherdomain.com/$1 [L, NC, R = 301] 'будет лучше для вас. – anubhava

+0

Имеются конкретные 7000 идентификаторов. Я не хочу, чтобы все URL-адреса перенаправлялись, только те, которые находятся в пределах идентификаторов 7000. – Maaz

3

С mod_alias, вы могли бы использовать RedirectMatch вместо:

RedirectMatch permanent ^/threads/[^/]+\.343/$ http://myotherdomain.com$0 

Это соответствует всем URL, которые соответствуют /threads/*.343/, * быть любой символ (ы), за исключением /.

+0

Я предполагаю, что «постоянный» заботится о 301 переадресации? – Maaz

+0

У меня небольшая проблема. Я думаю, что это точно не соответствует идентификаторам. Этот номер '343', кажется, что он принимает' 3433', если перенаправляет состояния '343'. В любом случае, чтобы сказать, что число в конце должно быть точным? – Maaz

+1

Экранирование '.' будет исправлено, см. Пересмотренный ответ. И да, 'constant' такой же, как' 301' (вы можете использовать либо). –

Смежные вопросы