Удаление лишних символов, сгенерированных при перезаписи - PullRequest
0 голосов
/ 12 июля 2009

Меня кормили этим файлом htaccess от Gumbo, и я благодарен за это, поскольку многому научился. Тем не менее, я сделал некоторые изменения и вернулся назад и вперед, и мне удалось снова сделать небольшие изменения, это работает на 80%, но есть случай, когда это не работает:

Если я ввожу http://www.example.com/view.php?t=45re, он успешно перезаписывается, но делает это в URL http://www.example.com/**?t=**45re Я не вижу, как это происходит. Больше помощь очень ценится.

# REWRITE DEFAULTS
RewriteEngine On
RewriteBase /

# /view.php?t=h5k6 externally to /h5k6
RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$
RewriteRule ^view\.php$ / [L,R=301]

# /h5k6 internally to /view.php?t=h5k6
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L]

Ответы [ 2 ]

1 голос
/ 12 июля 2009

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

Так попробуйте это:

# /view.php?t=h5k6 externally to /h5k6
RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$
RewriteRule ^view\.php$ /%2? [L,R=301]

# /h5k6 internally to /view.php?t=h5k6
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L]

%2 является обратной ссылкой на совпадение второй группировки шаблона соответствующей директивы RewriteCond. Так что %2 в этом случае будет содержать совпадение ([^&]+) в ^([^&]*&)*t=([^&]+)&?.*$.

1 голос
/ 12 июля 2009

Не зная ни вашего случая, ни того, что сказал вам Гамбо, из того, что я могу извлечь из вашего вопроса (т.е. вы хотите, чтобы строка запроса не передавалась при внешнем перенаправлении), вы могли бы либо

RewriteRule ^view\.php$ /? [L,R=301]

обратите внимание на дополнительные? Или

RewriteRule ^view\.php$ / [L] 

удаление внешнего перенаправления и использование внутреннего.

...