Как скрыть параметры URL GET ( http://domain.com/MyFirstYii/page?view=about ). Я искал много сообщений. Все они говорят о переписывании и диспетчере URL-адресов, но я не мог добиться того, чего хочу. 🙁
Мой сценарий,
Я просто хочу скрыть параметры URL GET.
Например:
http://domain.com/MyFirstYii/page***?view=about***
Я хотел скрыть ***?view=about***
.
Затем URL-адрес должен выглядеть так: http://domain.com/MyFirstYii/page
. Другие страницы вроде этого http://domain.com/MyFirstYii/post
. Простыми словами мои параметры GET должны действовать как параметры POST.
Заранее спасибо.
Редактировать:
Я хочу создать некоторые правила в URLManager , но какие правила скроют параметр GET.
\ w в regexp означает символ "word", и такая часть url, как "my-prety-page", не будет соответствовать. Чтобы скрыть параметры GET, вы должны улучшить свои правила urlManager. Вы можете написать такое правило для страниц, используя URL-адреса SEF:
'<controller:\w+>/<id:\d+>/<title:[^\/]*>/*' => '<controller>/view'
В этом случае, когда вы вводите URL-адрес
http://example.com/page/12/my-prety-title
контроллер страницы будет вызываться для выполнения действия вида с идентификатором и заголовком в качестве аргументов. То же самое, если вы вводите этот URL:
http://example.com/page/view?id=12&title=my-prety-title
Последняя часть /*
в правиле позволяет сохранить дополнительные параметры. Например, если ваш адрес
http://example.com/user/55/john-doe-junior/foo/bar/
в actionView
вы можете написать
echo '<pre>' ; print_r($_GET); echo '</pre>' ; die();
и вы увидите
Array ( [id] => 55 [title] => john-doe-junior [foo] => bar )
раскомментируйте эту строку из main.php
'UrlManager' => массив ( 'UrlFormat' => 'Путь', 'ShowScriptName' => ложно, 'Правила' => массив ( 'MyFirstYii / запись / <вид>' => 'MyFirstYii / запись', '<Контроллер: \ W +> / <идентификатор: \ D +>' => '<контроллер> / вид', '<Контроллер: \ W +> / <действие: \ W +> / <идентификатор: \ D +>' => '<контроллер> / <действие>', '<Контроллер: \ W +> / <действие: \ ш +>' => '<контроллер> / <действие>', ), ),
И поместите файл .htaccess в корневую директорию проекта и напишите следующий код
RewriteEngine on # Если существует каталог или файл, используйте его напрямую RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d # в противном случае переслать его в index.php RewriteRule. index.php
Добавьте это правило url в начало своих правил URL:
'page/<view:\w>' => 'user/page'
Я предполагаю следующее:
Если мои предположения ошибочны, укажите правильное имя контроллера и имя действия, чтобы я мог исправить ответ.
UPDATE: имя фиксированного контроллера на основе комментария
UPDATE2:
Если вы хотите, чтобы это работало для всех действий в вашем контроллере, используйте:
'<action:\w>/<view:\w>' => 'user/<action>'
Если вы собираетесь использовать GET и нуждаетесь в этом параметре, вы не можете скрыть его, так как это работает GET. Если вам действительно нужно скрыть этот параметр, вы должны переключиться на POST, так как тогда параметры будут передаваться в полезной нагрузке запроса, а не в URL-адресе.
используйте метод post вместо get …. это лучшее и эффективное решение.
следить за вашим запросом проверить этот сайт:
[Http://pure-essence.net/2007/06/29/simple-php-path-rewrite/]