mod_rewrite с запросами GET - PullRequest
0 голосов
/ 02 июня 2010

У меня есть mod_rewrite, работающий на большей части моего сайта. Сейчас у меня есть поиск, который обычно указывает на

search.php?keyword=KEYWORD

И я пытаюсь переписать это на

search/?keyword=KEYWORD

Просто чтобы сделать его чище. Итак, вот мой mod_rewrite. (Есть и другие правила, которые я просто публикую, которые не работают.)

RewriteRule ^search/?keyword=([^/\.]+)/?$ search.php?search=$1

Когда я набираю запрос в адресной строке так, как мне хотелось бы, я получаю страницу с сообщением, что это «неработающая ссылка» (я предполагаю, что это эквивалент Chrome для ошибки 404). Так что я делаю не так? Я думаю, что проблема в «=» или «?» войдите в правило (первая часть), потому что когда я вынимаю? ключевое слово = часть, это работает. Имеет ли это смысл?

<Ч />

РЕДАКТИРОВАТЬ: Это мой полный код .htaccess:

RewriteEngine on
RewriteRule ^$ index.php
RewriteRule ^thoughts$ archives.php 
RewriteRule ^thoughts/$ archives.php
RewriteRule ^about$ about.php 
RewriteRule ^about/$ about.php 
RewriteRule ^search/\?keyword=([^/]+)$ search.php?search=$1 
RewriteRule ^tags/([^/]+)$ tags.php?tag=$1
RewriteRule ^thoughts/([^/]+)$ post.php?title=$1 [L]

Все еще появляется страница с ошибкой ...

Ответы [ 2 ]

5 голосов
/ 03 июня 2010

Если вы просто хотите преобразовать:

search.php?keyword=KEYWORD

в

search/?keyword=KEYWORD

все, что вам нужно сделать, это:

RewriteRule ^search/$ search.php [QSA]

Флаг QSA означает «добавление строки запроса» и передает в search.php все, что вы запрашиваете через GET:

search/?keyword=KEYWORDD
search/?name=value&name2=value2    

Вы также можете проверить Apache MultiViews , который отправляет каждый запрос / foo в любой файл foo. *, Который он находит в каталоге /, хотя они считаются плохими .

1 голос
/ 02 июня 2010
RewriteRule ^search/\?keyword=([^/.]+)/?$ search.php?search=$1

Символ знака вопроса имеет особое значение в регулярном выражении. Вам нужно избежать этого.

Кроме того, точка не имеет особого значения, когда она находится внутри класса символов; вам не нужно избегать этого (требуется, чтобы ключевое слово не содержало косых черт и точек).

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