2014-07-17 11 views
1

Справочная информация: Недавно я изменил в установке DokuWiki каждую строку, которая содержит определенное имя продукта другому. Теперь мне нужно перенаправить жестко закодированные ссылки на новый URL.Строка запроса: несколько раз заменить один и тот же текст

URL, выглядит следующим образом:

past: example.com/wiki/doku.php?id=sales:producta:descr:producta 
present: example.com/wiki/doku.php?id=sales:productb:descr:productb 

Издание: я должен заменить строку producta на productb. Эта строка может появляться несколько раз в URL-адресе. Поэтому его необходимо заменить независимо от количества вхождений.

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

Есть ли способ добиться этой замены?

ответ

1

Это довольно сложно, но это можно сделать. Попробуйте добавить это в файл .htaccess в вашем веб-документов корневой папке (часто public_html или htdocs):

Options -Multiviews 
RewriteEngine On 
# If the query string contains producta, capture it to %1 
RewriteCond %{QUERY_STRING} ^(.+?producta.*) 
# ... and bring it down to the url, temporarily inserting @@ 
RewriteRule ^(.+) [email protected]@%1? [DPI] 
# Rewrite product a to product b but only if @@ is in the string 
RewriteRule ^([^@][email protected]@.*)producta(.*) $1productb$2 [N] 
# Remove @@ 
RewriteRule ^([^@]+)@@(.*) $1?$2 [L] 

Это предполагает, что mod_rewrite является как установлен и активировано для .htaccess файлов. Если вы не уверены, чтобы проверить, установлен ли mod_rewrite, посмотрите список установленных модулей в выводе phpinfo(); По умолчанию mod_rewrite не включен для файлов .htaccess. Если вы управляете своим собственным сервером, откройте httpd.conf и убедитесь, что блок каталога веб-кортов содержит одну из следующих строк: AllowOverride FileInfo или AllowOverride All

+0

Ничего себе! Действует мгновенно. Спасибо за поддержку решетки. Неважный вопрос: есть ли способ показать замену в URL-адресе? – fuchur2502

+0

Рад, что это помогло, спасибо. :) Да, чтобы показать его в URL-адресе, измените '[L]' на '[R]'. Если это сработает, вы можете сделать это постоянным переадресацией с помощью [[R = 301] ' – zx81

+0

Спасибо. R-перенаправление кажется неработоспособным. URL изменился, но страница не загружается и не остается на открытой странице. Но это не имеет значения. У меня есть большая проблема: также URL-адреса без запросов будут перенаправлены следующим образом: http://www.example.com/there/sales/producta/version.txt внутренне по адресу http://www.example.com/there/ продажи/productb/version.txt. Потому что условие только будет рассмотрено первым Правилом. Поэтому я ограничил Правила одним каталогом следующим образом: RewriteCond% {REQUEST_URI} ^/(wiki) (/.*)? выше каждого правила. Это не создает правильного впечатления. Какие-либо предложения? – fuchur2502

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