2016-01-18 1 views
-1

Я действительно не понимаю, почему мой .htaccess файл работает неправильно с ^(.*)$ ... Это мой .htaccess:

RewriteEngine On 
RewriteRule ^(.*)$ index.php?alias=$1 [L] 

Я просто хочу, чтобы поместить весь текст после моего адреса хоста в параметре GET с именем «псевдоним». Результатом этого является то, что в моем PHP скрипт «index.php», $_GET['alias'] будет иметь значение «index.php» вместо того, что после моего адреса хоста. Если я изменить .htaccess так:

RewriteEngine On 
RewriteRule ^([A-Za-z\/]+)$ index.php?alias=$1 [L] 

Я, наконец, $_GET['alias'] с правильным значением. Например, если я запрошу http://myaddress.com/the-value-of-alias, в первом случае я получу $_GET['alias'] = 'index.php'. Во втором случае вместо этого я буду get $_GET['alias'] = 'the-value-of-alias'. Тогда может кто-нибудь объяснить мне, в чем разница между ^([A-Za-z\/]+)$ и ^(.*)$, пожалуйста? Спасибо вам большое заблаговременно. :)

ответ

0

Когда вы кладете. * Соответствует любому URL, так что вы в конечном итоге в рекурсивном перенаправлении тогда, когда у вас есть конкретные элементы регулярного выражения он будет работать, как это соответствует только первому URL. Он не соответствует URL-адресу назначения, поскольку в нем есть символ «равный»

0

Выражение ^(.*)$ означает что-либо, кроме точки.

Что касается выражения ^([A-Za-z\/]+)$, он получит символы от А до Я, а также от а до z