2013-10-25 3 views
-3

Есть ли способ заменить все вопросительные знаки, '&', и знак равенства по косе ???Заменить все вопросительные знаки и знак равенства на косую черту?

в настоящее время я только замена расширений PHP на .html

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteRule ^(.*)\.html$ $1.php [nc] 

сейчас, если веб-сайты URL является этот

http://www.mydomain.com/session/image-display.php?image=1&id=59 

пользователь должен получить

http://www.mydomain.com/session/image-display.html/image/1/id/59 

--edited ---

Мне просто нужен пример, чтобы я мог писать их и для других страниц. также как переписать 2 или более правил перезаписи?

+0

Вы знаете, что это наоборот, не так ли? Вам придется заменить косые черты на '?', '&' Или '=', в зависимости от того, где они происходят. – Joey

+0

Да, конечно, есть способ, но это может означать, что вам нужно создать для него свой собственный модуль apache. Подсказка. Не полезно спрашивать «если есть способ», потому что, безусловно, есть один. – hakre

+0

да, но я немного новичок в этом, если бы мог получить пример, я мог бы написать для всего сайта, не так ли? –

ответ

0

На примере вы дали, вы можете использовать это:

RewriteRule ^session/image-display.html/image/(.*)/id/(.*) 
/session/image-display.php?image=$1&id=$2 [L] 

код [L] в конце не является обязательным, он говорит Apache прекратить искать другие правила, если это один применяется

+0

L будет, если это правило применяется и URI будет переписан (изменен) введите следующий раунд перезаписи. Этот флаг, который вы имеете в виду, вероятно, это флаг [\ [END \]] (http://httpd.apache.org/docs/current/rewrite/flags.html#flag_end), который не войдет в следующий раунд. – hakre

+0

@hakre Я не видел никаких правил переадресации в сообщении OP, поэтому [L] остановит все дальнейшие правила от применения –

+0

Неверно.Даже он останавливает все дальнейшие правила для * текущего раунда *, он начнет все правила в следующем раунде * (по мере изменения URI). А также неверно: если это будет перенаправление, не было бы необходимости в этом флаге, так как перенаправление немедленно выйдет (например, END). Так что говорить L можно найти, потому что это не переадресация, не имеет смысла (технически говоря). Надеюсь, это немного разъяснит это. – hakre

0

вы должны изменить ваши ссылки, так что они выглядят как:

http://www.mydomain.com/session/image-display.html/image/1/id/59 

Затем добавьте это в файл Htaccess в корневом каталоге, перед любыми правилами, которые вы, возможно, уже есть:

RewriteCond %{THE_REQUEST} \ /session/image-display\.php\?image=([^&]+)&id=([^&\ ]+) 
RewriteRule^/session/image-display.html/image/%1/id/%2? [L,R=301] 

RewriteRule ^session/image-display\.html/image/([^/]+)/id/([^/]+) /session/image-display.php?image=$1&id=$2 [L] 
0

Попробуйте это в .htaccess:

RewriteRule ^(.*)\.html/image/([^/]+)/id/([^/]+)$ $1.php?image=$2&id=$3 [NC] 
+2

Это, конечно, работает только для этого точного дела и не будет обобщать другие аргументы. – Joey

0

Эти 2 правила внутренне перепишем /session/image-display.html/n1/v1/n2/v2/n3/v3 к /session/image-display.php?n3=v3&n2=v2&n1=v1

Там может быть любое количество /name/valueпар как это правило довольно общий ,

# this rule will be applied as many times as there are /name/value pairs in URI 
# after /session/image-display.html 
RewriteRule ^(session/image-display\.html)/([^/]*)/([^/]*)(.*)$ /$1/$4?$2=$3 [L,QSA,NC] 

# this rule be applied in the last then all /name/value pairs have been converted 
# into query string 
RewriteRule ^(session/image-display)\.html/?$ /$1.php [L,NC] 
Смежные вопросы