2014-01-02 15 views
0
Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteBase /domain.com/ 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R,L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*?)/?$ /domain.com/$1.php [L] 

утра, используя этот код удалить знак вопроса, но его не работает, пытаясь http://domain.com/details?id=71 к http://domain.com/details/id/71 Пожалуйста, помогите мне, где я ошибаюсь?как удалить знак вопроса

Заранее спасибо

+0

Что такое, что первый RewriteCond делать? Если запрос начинается с 3 до 9 заглавных букв, за которым следует пробел, совпадающий по крайней мере с одним из ничего (что ?? '([^.] +)'), За которым следует .php? –

+0

@MikeB да, поэтому, если запрос «GET /some-folder/some-file.php HTTP/1.1','/some-folder/some-file' фиксируется и отправляется как перенаправление –

+0

@JonLin Последнее rewriterule не позаботится об этом? –

ответ

1

Я не уверен, что вы пытаетесь достичь с первым переписыванием, а для второго (последней три строки), если входящего URI не фактический каталог или файл, вы хотите переписать что-то вроде details/id/71 в /details.php?id=71?

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /$1.php?$2=$3 [L] 

должно закрыть вас, если всегда есть 3 поля. В RewriteRule вы не ставите доменное имя еще раз.

+0

первое удаление переименования .php, но я также пытаюсь заменить? и = с /, но он не работает, так что вы можете вести меня, что я должен делать на самом деле? –

+0

Ваш _incoming_ URI находится в форме SEO/details/id/71, и вы пытаетесь переписать его в форму, которую могут обрабатывать сервер и PHP: '/details.php? Id = 71', правильно? Вы ** не можете ** использовать .htaccess для перехода в другое направление - он даже не видит _outgoing_ URL. –

+0

ya вы правы, его для SEO, но что я должен делать, я путаю. –

0

Предполагая, что скрипт называется details.php, следующее одно правило:

RewriteRule details/(.*)/(.*)/$ /details.php?$1=$2 

Если перепишет www.domain.com/details/id/71 в www.domain.com/details.php?id = 71

Вам не нужно все это, чтобы удалить расширение .php.

1

Ваш код не делает ничего удаленно близко к тому, что вы хотите. Ваш код просто удаляет расширение php, когда запрос делается явно с расширением и добавляет его обратно внутри. Для того, чтобы сделать http://domain.com/details?id=71 попадают в http://domain.com/details/id/71, вам необходимо:

RewriteEngine On 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s/+([^/]+?)(?:\.php|)\?([^=]+)=([^&\ ]+) 
RewriteRule^/%1/%2/%3? [L,R] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /$1?$2=$3 [L] 

вы хотите это перед своими правилами, снимающие расширение PHP

+0

Спасибо за ваш ответ Джон, но после того, как вы использовали свой выше код .php, приходите снова и? & = все еще отображается. –

+0

@ user3154050 Я оставил '?' После '[^ /] +' шаблона. –

+0

Жаль, но все же он не работает, .php не удаляет после использования выше кода и? & = все еще появляется :( –

Смежные вопросы