2016-08-16 6 views
1

Я пытаюсь преобразовать мою динамическую ссылку PHP в ясную ссылку; для этого я использовал RewriteRule. Но работа, кажется, не сделано должным образомПосле использования .htaccess RewriteRule страница не открывается должным образом

Я пытаюсь преобразовать

dappersole.in/product.php?product_id=45; 

Для

dappersole.in/product/46; 

Использование

RewriteRule ^product/([0-9]+)$ product.php?prodct_id=$1 [NC,L] 

После этого страница не загружается должным образом. Но если я удалю product/ из RewriteRule, загрузки страницы отлично

RewriteRule ^([0-9]+)$ product.php?prodct_id=$1 [NC,L] 
dappersole.in/45; 
+0

В правиле повторной записи, похоже, есть орфографическая ошибка. Вы сначала упомянете?product_id = 45', но правило использует 'prodct_id = $ 1' – RamRaider

+0

Нет, это product_id = 45 не prodct моя ошибка –

ответ

0

Ваша страница не загружается полностью, потому что вы имеете в виду ваш CSS и JavaScript ресурсов относительно текущего местоположения. Вам нужно изменить это, чтобы ссылаться на ресурсы относительно корня сайта. Например, изменить:

<link rel="stylesheet" type="text/css" href="css/slider-pro.min.css" media="screen"/> 

к этому:

<link rel="stylesheet" type="text/css" href="/css/slider-pro.min.css" media="screen"/> 

отметить ведущую косую черту перед css/slider.... Вам нужно сделать это для всех ваших ресурсов CSS, jQuery и изображений. Кроме того, вы можете сэкономить время, добавив следующую строку в ваш <head> узел:

<base href="/"> 

Или еще лучше:

<base href="http://dappersole.in/"> 

Кроме того, я рекомендую вам сделать то же самое с mod_rewrite правилом:

RewriteRule ^product/([0-9]+)$ /product.php?product_id=$1 [NC,L] 

И наконец, я рекомендую вам убедиться, что Multiviews не включен, добавив эту строку вверху файла:

Options -Multiviews 
+0

wow mn respect ... Кажется, что у вас много знаний по php .... Работал отлично. Наконец, после целого fu * дня короля это сработало. Спасибо большое приятелю –

+0

Добро пожаловать - рад, что он работает. :) –

0

Я имел ту же самую проблему на старой версии апача/mod_rewrite, и я никогда не узнал, что точная проблема. Но определенно не понравилось переписывать /something/123 в /something.php?....

Быстрое исправление, которое я использовал, переименовывало мой php-файл в _something.php и использовал его.

Так что в вашем случае переименования product.php к чему-то, что не начинается с product как _product.php:

RewriteRule ^product/([0-9]+)$ _product.php?product_id=$1 [NC,L] 
          ^strangely enough this solved my problem... 
+0

, что означает, что я должен изменить свой файл формы для продукта на _product. –

+0

По-прежнему такой же, спасибо за ваше предложение. –

+0

@jeroen - см. [Мой комментарий] (/ questions/38974845/after-use-htaccess-rewriterule-page-not-opening-proper/38976863 # comment65306760_38975811) ниже. –

0

Я тоже были подобные проблемы в этом с Apache 2.2 - если имя и переписаны имя очень похожи он не работает. Вы можете обмануть немного и использовать другой URL, такую ​​как http://www.example.com/item/46

RewriteRule ^item/([0-9]+)$ product.php?product_id=$1 [NC,L] 
+0

Подобные проблемы с именами могут возникать из-за использования опции «Мультивизы», которая использует согласование контента для обслуживания файлов с неоднозначным наименованием (например, , отсутствующее расширение файла). Отключение Multiviews отключает это, и правила перезаписи не будут затронуты. –

+0

Всякий раз, когда я пытался «Опции + FollowSymlinks -Multiviews», я почему-то получаю сообщение об ошибке 500. – RamRaider

+0

Не уверен, что 'Options' чувствителен к регистру, но он должен быть' + FollowSymLinks' с cap-'L'. –

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