Это пример того, чего я пытаюсь достичь.
Исходный URL:
http://subdomain.domain.com/company.php?test=TES001
Переписанный URL:
http://subdomain.domain.com/company/AAA001
Options +FollowSymLinks RewriteEngine on RewriteBase / RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2 ErrorDocument 404 /
Если вы хотите /company.php?test=AAA001
перенаправить на /company/AAA001
, сделайте следующее:
RewriteCond %{QUERY_STRING} test=([AZ]+[0-9]+) RewriteRule ^company.php /company/%1? [R]
Если вы хотите /company/AAA001
быть переписаны как /company.php?test=AAA001
, сделайте следующее:
RewriteRule company/([AZ]+[0-9]+)$ /company.php?test=$1
Я думаю, что ваш RewriteRule написан не так, как бы наоборот, это должно быть
RewriteRule company.php?test=([AZ]+)([0-9]+) /company/AAA$2
То есть вы сначала даете шаблон, чтобы соответствовать, а затем, что он переписан … однако я не уверен, что вы можете фактически сопоставить параметры GET, подобные этому …
Я не эксперт по mod_rewrite, но:
RewriteRule company/(.*)/(.*)/$ /company.php?$1=$2
не должны соответствовать выражениям:
/company/foo/bar/
и отобразить их в:
/company.php?foo=bar
У вас есть URL-адрес:
/company/foo
Что говорят журналы Apache? Действительно ли ваш .htaccess читается? Вы перезагрузили конфигурацию Apache? (не помню, если это необходимо)
У вас неправильный порядок … сразу после того, как «RewriteRule» является формой URL-адреса, который вы хотите (т. Е. Вашего чистого URL-адреса), с Regex для любого изменения в этом URL-адресе. После этого у вас есть путь к URL, плюс токены Regex для найденных значений (например, $ 1, $ 2 и т. Д.).
RewriteEngine On RewriteCond %{HTTP_HOST} ^domain.com RewriteRule (.*) http://www.domain.com/$1 [R=301,L] ErrorDocument 400 http://www.domain.com/400 ErrorDocument 403 http://www.domain.com/403 ErrorDocument 404 http://www.domain.com/404 ErrorDocument 500 http://www.domain.com/500 RewriteEngine on RewriteBase / #PAGES RewriteRule ^/company/([AZ]+)([0-9]+)/$ company.php?test=$1&%{QUERY_STRING} [NC,L]