2013-10-12 3 views
3

У меня вопрос о htaccess и его переписываниях.
У меня есть этот код:игнорировать часть ссылки с помощью htaccess

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^users/(\d+)*$ ./profile.php?id=$1 
RewriteRule ^threads/(\d+)*$ ./thread.php?id=$1 

RewriteRule ^search/(.*)$ ./search.php?query=$1 

который example.com/users/123 является приравнивает к example.com/profile.php?id=123.

, если я изменю ссылку на это: example.com/users/123/John
Will Htaccess игнорировать/Джон или любые дополнительные символы после ID?
факт, Джон - настоящее имя 123 ID, я хочу, чтобы это было.

ответ

4

Нет, это не будет игнорировать дополнительные детали из вашего URL, так как вы используете $ (конец строки) в регулярном выражении здесь:

^users/(\d+)*$ 

Измените правила:

RewriteCond %{SCRIPT_FILENAME} !-d [OR] 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule^- [L] 

RewriteRule ^users/(\d+) profile.php?id=$1 [L] 

RewriteRule ^threads/(\d+) thread.php?id=$1 [L] 

RewriteRule ^search/(.*)$ search.php?query=$1 [L] 
2

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

Если вы просто игнорировать все после ид, то:

http://example.com/users/123/John 

и

http://example.com/users/123/Jane 

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

Мое решение было что-то вроде этого:

RewriteRule ^users/(\d+)(/(.*))?$ profile.php?id=$1&name=$3 [L] 

В своем коде, теперь вы можете проверить, если пользователь с идентификатором в $_GET['id'] имеет имя в $_GET['name'] и если это не так, вы можете перенаправить к правильная ссылка с 301 временно перемещена. Таким образом, неправильная ссылка может не заканчиваться поисковыми индексами, и ваши пользователи всегда будут видеть правильные URL-адреса профиля. Примеры:

http://example.com/users/123/John -> nothing happens 
http://example.com/users/123  -> redirect to /123/John 
http://example.com/users/123/Jane -> redirect to /123/John 
http://example.com/users/123Jane -> not found, bad link format 
Смежные вопросы