Изменение шаблона URL для принятия имени пользователя, такого как Facebook

Мне нужно скрыть ссылку на профиль пользователя с этого http://example.com/site/index?user_id=sami.yaqoub

Быть похожим на Facebook http://example.com/sami.yaqoub

Я изменил правила файла конфигурации, за исключением этого.

config.php

<?php
..
 'urlManager' => array(
            'urlFormat' => 'path',
            'showScriptName' => false,
            'rules' => array(
                    '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
                '<user:[a-zA-Z0-9_-]\w+>'=>'site/index',// here is the code 
            ),
        ),
...
?>

Это работало со всеми словами, не содержащими никакой точки "." поэтому я изменил это так

 '<user:[a-zA-Z0-9_-.]\w+>'=>'site/index',// return error

Но тоже не сработало. Каков лучший метод в этом случае, кроме этой формулы Name.anything

заранее спасибо

3 ответа

Решение

В тебе регулярное выражение [a-zA-Z0-9_-.]\w+ вы можете сопоставить такие вещи, как .helloworld но нет hello.world потому что вы соответствуете точке . персонаж только в первой позиции.

Вы должны написать это так: [a-zA-Z0-9_-.][\w.]+,

Я не уверен, но, возможно, Facebook не позволяет использовать специальные символы в первой позиции, такие как точка или тире.-, В этом случае правильный ответ будет: [a-zA-Z0-9][\w.]+ или короче \w[\w.]+

Обратите внимание, что \w в регулярном выражении совпадает с символами слова. \w эквивалентно [A-Za-z0-9_]

Попробуйте создать файл.htaccess в корневой папке и вставить этот код ниже.

# if you have mod rewrite installed in your hosting space, you can enable pretty url for
# compressed css/js by uncommenting following lines

#RewriteEngine On
#Options FollowSymLinks
#RewriteRule   ^packs/(\w+)\.(css|js)   packs/jscsscomp.php?q=$1.$2 

Options +FollowSymlinks
Options -Indexes

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L,QSA]

<Files .htaccess>
order allow,deny
deny from all

Это может также помочь -> Yii, как получить чистый и красивый URL

Я верю, что вы хотите сделать, это создать Slug,

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

Другие вопросы по тегам