Перенаправление через .htaccess в .php с аргументами в текущей папке - PullRequest
1 голос
/ 15 ноября 2010

Я пытаюсь перенаправить что-то вроде foo/bar на ?foo=bar, поэтому я могу сделать www.mydomain.com/hey/foo/bar на www.mydomain.com/hey/?foo=bar, но я не могу понять синтаксис правильно.Я попробовал следующее:

RewriteEngine on
RewriteRule ^foo/(.*)$ ?foo=bar [NC]

Но это не работает.Как бы я это сделал?Я попытался добавить косую черту после знака вопроса, но это делает его ссылкой на корневой каталог.

Спасибо, Jengerer

Ответы [ 4 ]

1 голос
/ 24 января 2011

Вы должны включить фактический файл, в который вы переписываете. Использование ?foo=bar не указывает на какой-либо конкретный файл.

Используйте следующее правило:

RewriteEngine on
RewriteRule ^(.*)/(.*)$ index.php?$1=$2 [NC]

Обратите внимание, что я указываю на файл index.php. $1 заменяется тем, что совпадает с первым (.*), а $2 - вторым. Так что, если кто-то перейдет на foo/bar, он будет переведен на index.php?foo=bar.

Важное примечание: Если вы решите использовать (.*) и примете любой символ для имени или значения переменной, и планируете использовать эту информацию в запросах к базе данных, вам наверняка придется избежать правильно использовать содержимое escape-функций вашей базы данных (mysql_real_escape_string или pg_escape_string) или подготовленные операторы.

Если у вас есть проблемы со стилем или элементами на странице, которые не отображаются правильно, потому что вы используете относительные пути, вам нужно будет использовать абсолютные пути, начиная с корня. В противном случае стиль ваших страниц, изображения и т. Д. Будут нарушены.

<link rel="stylesheet" type="text/css" href="/path/to/style.css" />
0 голосов
/ 28 января 2011

Когда вы помещаете .htaccess в свой корень, он должен выглядеть примерно так:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\/]+)\/([^\/]+)\/([^\/]+)$ $1?$2=$3 [L]

когда вы помещаете .htaccess в вашу папку "hey", он должен выглядеть примерно так:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/]+)\/([^\/]+)$ ?$1=$2 [L]
0 голосов
/ 24 января 2011

Что ж, получается, что проблема была не в перенаправлении, а в ссылках, которые были сделаны после перенаправления.

После перенаправления с /foo/bar на /?foo=bar CSS-ссылки и изображения были плохо сопоставлены, поскольку теперь он искал локальные ссылки в каталоге /foo/bar, который не существует. Какой интересный «глюк».

0 голосов
/ 15 ноября 2010

Может быть, попробуйте удалить ^ из ^foo/(.*)$?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...