2013-04-26 2 views
1

Я просто знаю, как работает htaccess, но меня всегда путают с синтаксисом записи, и я ценю, сможет ли кто-нибудь помочь мне решить проблему ниже htaccess.Переписать синтаксис в .htaccess

У меня есть пару страниц ссылок для перенаправления на что-то вроде

http://mydomain.com.au/product-details.php/142/categoryAbstract 

, но из-за ошибки предыдущего разработчика изображения не загружаются, если этот URL не

http://mydomain.com.au/product-details.html/142/categoryAbstract 

Он конвертируются все страницы PHP к html (я действительно не знаю, что это за намерение в этом), но

теперь url должен работать, даже если он http://mydomain.com.au/product-details.php/142/categoryAbstract

Он использовал нижний htaccess для этого, но не работал. Если я вручную изменю URL от .php до .html все работает нормально.

RewriteRule ^product-details.html/(.*)/(.*)$ product-details.php?productid=$1&category=$2 

мне нужна рабочая строка кода, так что даже URL http://mydomain.com.au/product-details.php/142/categoryAbstract должен работать.

+0

Был ли предыдущий разработчик фактически конвертировать все страницы в HTML, или он создал строку в файле htaccess, который изменяет расширение? Можете ли вы просмотреть файл htaccess и посмотреть, существует ли такая строка? –

+0

Он просто написал строку так, как если бы он вызывал phpinfo.html в браузере. – Kerry

ответ

2

Вам просто нужно OR группу (a|b) учитывать обе возможности:

RewriteRule ^product-details\.(html|php)/(.*)/(.*)$ product-details.php?productid=$1&category=$2 
#---------------------------^^^^^^^^^^^ 

Это может быть немного улучшилось, хотя. (.*) - жадные совпадения. Вам лучше использовать ([^/]+) в качестве первой группировки, чтобы соответствовать всем до /. Я также избежал точки как \., поэтому он сопоставляется как литерал, а не любой символ.

RewriteRule ^product-details\.(html|php)/([^/]+)/(.*)$ product-details.php?productid=$1&category=$2 

Расширение .php обычно модифицирован либо путем перезаписи или фактического переименование файлов и конфигурации сервера, чтобы разобрать .html в .php для того, чтобы скрыть какой-то на стороне сервера информацию от конечных пользователей. Чтобы они не знали, какие технологии сайт работает на задней панели. Тем не менее, реже переименование файлов на .html, чем использование перезаписи URL, чтобы скрыть .php.

0
RewriteRule ^product-details.html/(.*)/(.*)$ product-details.php?productid=$1&category=$2 

Что делает это правило принимать все после того, как product-details.html/ и до последнего/и второй бит не получает принято после того, как последний/до конца строки. то он берет эти биты и помещает их там, где стоят $ 1 и $ 2.

изменить его, чтобы он принимает .html и .php вы можете изменить его с

RewriteRule ^product-details(.html|.php)/(.*)/(.*)$ product-details.php?productid=$2&category=$3 

Потому что это выглядит как первый бит вы захвата являются числами и (.*) жадный селектор может быть лучше замените его ([0-9] *), который будет выбирать только номера. таким образом, если у вас когда-либо есть/s в вашей категории, вы будете в порядке. давая вам:

RewriteRule ^product-details(.html|.php)/([0-9]*)/(.*)$ product-details.php?productid=$2&category=$3