Как мне написать собственный файл mod_rewrite .htaccess для маршрутизации CakePHP? - PullRequest
1 голос
/ 01 марта 2009

Я переписал свое веб-приложение с помощью CakePHP, но теперь мне нужно перенаправить мои старые отформатированные URL-адреса в мой новый формат URL-адреса. Я не могу добавить свое собственное правило переписывания модов. Я добавил его выше основного правила перезаписи cakephp, но получаю бесконечный цикл перенаправления. Я просто хочу http://mysite.com/index.php?action=showstream&nickname=user перенаправить на http://mysite.com/user до того, как произойдет перезапись CakePHP.

РЕДАКТИРОВАТЬ: Хорошо, теперь, когда условие выполнено, оно перенаправляет, но добавляет конечную строку запроса к концу. Я предполагаю, что это из-за флага QSA в правилах перезаписи CakePHP, но у меня сложилось впечатление, что буква "L" в моем правиле остановит выполнение ...

RewriteEngine On

RewriteCond %{QUERY_STRING} ^action\=showstream&nickname\=(.*)$
RewriteRule ^.*$ http://mysite.com/%1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Ответы [ 2 ]

1 голос
/ 01 марта 2009

Попробуйте проверить строку запроса (THE_REQUEST), чтобы увидеть, какой URI изначально был запрошен:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /index\.php
RewriteCond %{QUERY_STRING} ^action=showstream&nickname=([^&]*)$
RewriteRule ^index\.php$ /%1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php?url=$0 [QSA,L]

Но, возможно, было бы проще сделать это с помощью PHP.

1 голос
/ 01 марта 2009

Когда вы делаете захват внутри строки RewriteCond вместо RewriteRule, вы должны ссылаться на захват с% N вместо $ N. То есть ваша строка RewriteRule должна быть:

RewriteRule ^index.php$ /%1 [R=301,L]
...