2013-04-05 6 views
1

Я просто искал решение для преобразования any =,?, &, найденное в строке запроса в простой слэш /. Чтобы быть более точным, моя ссылка что-то вроде:mod_rewrite: transform = and & in slashes

http://www.mydomain.com/product.php?c=1&sc=12&products_id=15

, и я бы это так: http://www.mydomain.com/product.php/c/1/sc/12/products_id/15

независимо от главной страницы может быть (в данном случае является product.php, но это может быть foo.php, bar.php ... или еще). У меня много googled, но не нашел хорошего решения для достижения того, что я ищу. я нашел сложные правила перезаписи, но все они включают "название страницы" в них: т.е.

RewriteRule ^/индекс/([^ /] +)/([^ /] +) $ /? index.php? foo = $ 1 & bar = $ 2 [L, QSA]

Это правило применимо только к index.php и к известным переменным типа foo, bar. Мне нужен более общий, независимо от главной страницы, независимо от переменных. Можно ли это сделать?

Любое предложение? Спасибо

ответ

0

Предполагаю, что вы используете apache> = 2.2. Добавьте это в апача конф:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # you absolutely need to use RewriteBase if this snippet is in .htaccess 
    # if the .htaccess file is located in a subdirectory, use 
    # RewriteBase /path/to/subdir 
    RewriteBase/

    RewriteCond %{QUERY_STRING} ^(=|&)*([^=&]+)(=|&)?(.*?)=*$ 
    RewriteRule ^(.*)$ $1/%2?%4= [N,NE] 

    RewriteCond %{QUERY_STRING} ^=$ 
    RewriteRule ^(.*)$ $1? [R,L] 
</IfModule> 

Первая пара RewriteCond/RewriteRule несколько раз соответствует маркер, ограниченную & или = и добавляет его в путь. Важным флагом является [N], который заставляет весь набор правил начинать заново, так часто, как правило. Кроме того, a = добавляется в конец строки запроса. Это делается для создания метки в URL-адресе, где произошло по крайней мере одно переписывание.

Второй набор правил проверяет наличие метки = после того, как URL был полностью переписан и выдает перенаправление.

Посмотрите на http://wiki.apache.org/httpd/RewriteQueryString для получения некоторых полезных советов.

+0

Спасибо Marcellus, ваш фрагмент почти сделал трюк! :) Что я понимаю: http://www.mydomain.com/web/htdocs/www.mydomain.com/home/product.php/c/1/sc/12/products_id/181 как вы может видеть, что он принимает также веб-серверные каталоги web/htdocs/www.mydomain.com/home/ , которых не должно быть. Подсказка? – Aptivus

+0

У меня тоже было это поведение, когда я добавил фрагмент файла .htaccess. Кажется, он добавляет путь к относительному URL-адресу. Фрагмент работал безупречно, когда я добавил его в httpd.conf/httpd-vhosts.conf. У вас есть доступ к вашим .conf-файлам? – Marcellus

+0

К сожалению, я этого не делаю. Любой другой способ добиться успеха, не касаясь httpd.conf? – Aptivus