2015-12-08 2 views
0

Я пытаюсь переписать свой url для проекта, над которым я сейчас работаю. Регулярное выражение, которое у меня есть, работает в моих тестовых строках, но не тогда, когда я помещаю его в .htaccess.Regex in .htaccess не работает

То, что я пытаюсь сделать, это сделать этот адрес:

http://project.localhost/abcd/index.php?test=test123 

Rewrite к:

http://project.localhost/index.php?id=abcd&test=test123 

Это то, что я в данный момент у меня в файле .htaccess:

Options +FollowSymlinks 
RewriteEngine on 

RewriteRule /\/(.*?)\//g /index.php?id=$2 [QSA] 

Кто-нибудь знает, что мне здесь не хватает?

Редактировать: Забыл упомянуть, что значение test = не всегда будет одинаковым. Он может иметь несколько разных параметров.

Спасибо!

ответ

2

Вы можете использовать гораздо более простое регулярное выражение

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

Обратите внимание на [QSA] присоединяет другие paramters в строке запроса.

Редактировать: Добавлено условие для файлов

+0

Спасибо за это. Кажется, что-то делает в онлайн-тестере [link] (http://htaccess.madewithlove.be/), который я использую, но не в моем фактическом файле htaccess (мне нужно сохранить его как .htaccess в моей директории project.localhost, правильно?). Результатом теста является то, что конечный URL-адрес «Новый URL-адрес: http: //project.localhost/index.php? Id = abcd/index.php» – Levi

+0

Обновлен мой ответ ... –

+0

Спасибо, это почти работает! Вместо этого я получаю следующее: [id] => 123-test/index.php. Я думаю, что это проблема в регулярном выражении? – Levi

0

mod_rewrite не может понять шаблон вашего правила, поэтому он не обрабатывается.

Try:

RewriteEngine on 

RewriteCond %{THE_REQUEST} /([^/]+)/index.php\?([^=]+)=([^\s&]+) [NC] 
RewriteRule^/index.php?id=%1&%2=%3 [NC,L] 
+0

Спасибо за ответ! К сожалению, пока нет удачи, я попробовал это в своем htaccess файле, а также в онлайн-тесте htaccess. Кроме того, я забыл упоминать в своем первоначальном вопросе, что URL-адрес не всегда имеет значение test =, это может быть и другое значение, иногда несколько. Я отредактирую свой вопрос. Извиняюсь! – Levi

+0

@ Levi я обновил ответ, это должно работать прямо сейчас! – starkeen

+0

Извините, что я еще не ответил на это, проверив много разных вещей. Теперь это вызывает проблему с внутренним сервером. В онлайн-тесте говорится следующее: Информация для отладки: RewriteCond% {THE_REQUEST} /([^/]+)/index.php\?([^=]+)=([^\s&]+) [NC] \t Это условие не было выполнено. RewriteRule^/index.php?id=%1&%2=%3 [NC, L] \t Это правило не было выполнено. – Levi