мод переписывает чистый URL для окна поиска

У меня включен мод rewrite для удаления всех расширений страниц....

Это делается в httpd.conf, так как я использую apache в Windows.

установка у меня такая

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteRule ^([^\.]+)$ $1.html [NC,L]
</IfModule>

и это делает domain.com/bookings.html

отображаться как domain.com/bookings

У меня включен php в html файлах, поэтому он анализирует все страницы на php

Но теперь я разместил окно поиска на своем сайте, и если я буду искать «музыку», он будет использовать URL-адрес:

domain.com/search?q=music

Я хотел бы, чтобы мои URL-адреса выглядели так:

domain.com/search/music

Но также я хотел бы иметь возможность печатать

domain.com/search/abba

И он загрузит страницу «search.html», назовем ее «поиск», и добавит параметр ?q=abba , но затем все равно будет выглядеть как приведенный выше пример в строке URL.

Я уверен, что этого можно добиться с помощью перезаписи мода, но я не уверен, как сформулировать это выражение.

Заранее благодарю за любую помощь, которую я получаю :)


person DJ-P.I.M.P    schedule 07.02.2012    source источник
comment
Ваше согласие равно NULL. Улучшите это, иначе вы перестанете получать здесь помощь.   -  person ThinkingMonkey    schedule 08.02.2012
comment
Как я могу это сделать? я новичок в обмене стеками, извините   -  person DJ-P.I.M.P    schedule 08.02.2012


Ответы (2)


используйте URL-адреса в вашем html: domain.com/search/music

добавьте это в свой файл .htaccess в свой DocumentRoot.

Options +FollowSymLinks +Indexes -MultiViews
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_URI} (search)/([\w\d]+) [NC]
RewriteRule ^ %1.html?q=%2 [L,QSA]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

или добавьте это в свой .conf файл

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On

    RewriteCond %{REQUEST_URI} (search)/([\w\d]+) [NC]
    RewriteRule ^ %1.html?q=%2 [L,QSA]

    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^([^\.]+)$ $1.html [NC,L]
</IfModule>
person ThinkingMonkey    schedule 07.02.2012
comment
это дает мне страницу с ошибкой, я пробовал в httpd.conf, и не работал, поэтому пробовал в htaccess и не работал :cry: - person DJ-P.I.M.P; 08.02.2012
comment
у меня есть общая страница ошибок для всех ошибок, но в журналах apache написано 302 - person DJ-P.I.M.P; 08.02.2012
comment
@ DJ-P.I.M.P Это не должно быть перенаправление 302, так как это внутреннее перенаправление. У вас есть другие рерайтеры? - person ThinkingMonkey; 08.02.2012
comment
сделал все, что вы предложили, и ничего не сломалось с новой строкой, так что я счастлив, но он все еще не переписывает URL-адрес - person DJ-P.I.M.P; 08.02.2012
comment
@DJ-P.I.M.P, где находится правило удаления .html? - person ThinkingMonkey; 08.02.2012
comment
самый первый фрагмент кода, который я вставил в свой вопрос, - это код для удаления расширения .html. - person DJ-P.I.M.P; 08.02.2012
comment
@DJ-P.I.M.P Я имею в виду, это в вашем файле .conf или в файле .htaccess? - person ThinkingMonkey; 08.02.2012
comment
@ DJ-P.I.M.P Удалите это оттуда, добавьте в .htaccess порядок того, как я буду публиковать это в ответе. - person ThinkingMonkey; 08.02.2012
comment
хорошо, сделал это и теперь получаю ошибку 400 неверный запрос .... по крайней мере, это что-то - person DJ-P.I.M.P; 08.02.2012

Вы можете просто добавить одно простое правило RewriteRule:

RewriteRule ^/search/([a-zA-Z0-9]+)$ /search?q=$1 [QSA,NC,L]

Итак, в целом:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteRule ^([^\.]+)$ $1.html [NC,L]
   RewriteRule ^/search/([a-zA-Z0-9]+)$ /search?q=$1 [QSA,NC,L]
</IfModule>

О, и кстати:

А если этого недостаточно:

Две подсказки:

Если вы не находитесь в размещенной среде (= если это ваш собственный сервер и вы можете изменять виртуальные хосты, а не только файлы .htaccess), попробуйте использовать директиву RewriteLog: она поможет вам отследить такие проблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярного выражения:

http://www.quanetic.com/Regex (не забудьте выбрать ereg(POSIX) вместо preg(PCRE)!)

person Olivier Pons    schedule 07.02.2012
comment
попробовал код, и он не перезаписывается автоматически, когда я отправляю форму, а также загружает страницу с ошибкой, когда я набираю /search/music в адресной строке - person DJ-P.I.M.P; 08.02.2012
comment
Вы уверены, что перезапускаете сервер каждый раз, когда вносите изменения в vhost? это vhost или .htaccess? - person Olivier Pons; 08.02.2012
comment
да, я всегда перезагружаю сервер apache, если я изменяю htaccess или httpd.conf .... я не уверен, нужно ли мне это для htaccess, но я все равно делаю - person DJ-P.I.M.P; 08.02.2012