Основная проблема заключается в том, что вы не можете сопоставить строку запроса как часть RewriteRule
. Вам нужно переместить эту часть в оператор RewriteCond
.
RewriteEngine On
RewriteCond %{QUERY_STRING} jid=([0-9]+)
RewriteRule ^job_wanted\.php$ /job/%1?
Редактирование, чтобы отразить ваш обновленный вопрос, который противоположен тому, что я показал здесь. И наоборот, чтобы преобразовать /job/123
в то, что может потреблять ваш PHP-скрипт, вам понадобится:
RewriteEngine On
RewriteRule ^/job/([0-9]+)$ /path/to/job_wanted.php?jid=$1
Но у вас, вероятно, возникнут проблемы с тем, чтобы поместить это в файл .htaccess
где угодно, кроме корня, и, возможно, даже там. Если он работает в корне, вам, вероятно, придется удалить ведущий /
из RewriteRule
, который я здесь показываю.
Второе изменение, чтобы отразить ваш комментарий: я думаю, что вы хотите, это сложно, но это может сработать:
RewriteEngine On
RewriteRule ^/job/([0-9]+)$ /path/to/job_wanted.php?jid=$1 [L]
RewriteCond %{QUERY_STRING} jid=([0-9]+)
RewriteRule ^job_wanted\.php$ http://host.name/job/%1? [R]
Ваша основная проблема заключается в том, что вы хотите «исправить» существующие ссылки, предположительно, вне вашего контроля. Чтобы изменить URL-адрес в адресной строке браузера, необходимо перенаправить браузер. Другого способа сделать это нет.
Вот что делает второе правило cond +: оно сопоставляет входящие старые URL-адреса и перенаправляет их в ваш красивый формат URL-адреса. Это либо должно быть в конфигурационном блоке VirtualHost
, либо в файле .htaccess
в том же каталоге, что и ваш PHP-скрипт.
Первое правило действует противоположным образом: оно преобразует красивый URL обратно во что-то, что может использовать Apache, но оно делает это с помощью внутреннего подзапроса, который, надеюсь, не вызовет еще один раунд переписывания. Если это так, у вас есть бесконечный цикл. Если это работает, это вызовет ваш PHP-скрипт с параметром строки запроса для идентификатора задания, и ваша страница будет работать как обычно. Обратите внимание, что поскольку в этом правиле предполагается другой, возможно, несуществующий путь к файловой системе, оно должно указываться в блоке VirtualHost
или в файле .htaccess
в корне сайта, т. Е. в другом месте .
Распространение конфигурации по разным местам звучит как рецепт для будущих проблем для меня, и я не рекомендую это. Я думаю, вам лучше поменять ссылки под вашим контролем на красивые версии и не беспокоиться о других ссылках.