Странная проблема косой черты в htaccess - PullRequest
0 голосов
/ 22 мая 2011

URL: http://localhost/url/of/the/keyword/whatever/

RewriteRule ^url/of/the/keyword/([a-z]+)/?$ ?keyword=$1 [L]  
// php  
echo $_GET['keyword'];    
// outputs **whatever** (OK)
RewriteRule ^url/of/the/keyword/(.*)/?$ ?keyword=$1 [L]  
// php  
echo $_GET['keyword'];  
// outputs **whatever/** (with a trailing slash, which is not expected)

Кто-нибудь может объяснить, почему для второго условия есть косая черта?


Кроме того, как я могу разрешить ввод процента в URL перезаписи?

http://localhost/url/of/the/keyword/%40%23%24/

RewriteRule ^url/of/the/keyword/([0-9a-zA-Z-.%])/?$ ?keyword=$1 [L]

указанное выше правило не работает. Кто-нибудь может исправить это так, чтобы он допускал знак a-Z, 0-9, точку, дефис и процент?

Спасибо!

1 Ответ

2 голосов
/ 22 мая 2011

Вы получаете / за вторую RewriteRule, потому что .* является жадным. То есть жадно захватывает завершающий слеш, потому что вы пометили его как необязательный /?. Лучше быть конкретным с вашими шаблонами (например, с первым RewriteRule), чтобы избежать таких ситуаций.

Шаблон, которому вы соответствуете, может принять все Просто помните, что это должен быть действительный URL. Проблема в том, что вы забыли квантификатор. Таким образом, вы соответствуете только одному символу из группировки.

Добавить +

RewriteRule ^url/of/the/keyword/([0-9a-zA-Z\-.%]+)/?$ ?keyword=$1 [L]
...