Разработвам PHP уеб приложение. Имам страници, публикации, категории, продукти и т.н.

Ето го моя .htaccess файл за създаване на SEO приятелски URL:

Options -Indexes RewriteEngine on RewriteRule ^Page/(.*)/(.*)$ Page.php?Page_Id=$1&Page_Title=$2 [NC,L] RewriteRule ^Product/(.*)/(.*)$ Product.php?Product_Id=$1&Product_Title=$2 [NC,L] RewriteRule ^Category/(.*)/(.*)$ Category.php?Category_Id=$1&Category_Title=$2 [NC,L] RewriteRule ^Single/(.*)/(.*)$ Single.php?Post_Id=$1&Post_Title=$2 [NC,L] RewriteRule ^Blog/(.*)/(.*)$ Blog.php?Category_Id=$1&Category_Title=$2 [NC,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+)$ $1.php [L,QSA]  Order Allow,Deny Deny from all   ExpiresActive On ExpiresDefault 'access plus 1 month' ExpiresByType image/x-icon 'access plus 1 year' ExpiresByType image/gif 'access plus 1 month' ExpiresByType image/png 'access plus 1 month' ExpiresByType image/jpg 'access plus 1 month' ExpiresByType image/jpeg 'access plus 1 month' ExpiresByType text/css 'access plus 1 month' ExpiresByType application/javascript 'access plus 1 year'  

Когато го посетя Page.php?Page_Id=13 работи. А също и когато посещавам Page/13/Page-Title работи. Всичко е добре, когато тествам приложението си на сървъра, но не работи в wamp localhost.

Аз съм активен

LoadModule rewrite_module modules/mod_rewrite.so 

в Apache http.conf и тук е моят vhost:

  ServerName localhost DocumentRoot c:/wamp64/www  Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride All Require local    ServerName schoolarshop DocumentRoot 'c:/wamp64/www/schoolarshop'  Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride none Require local   

Пример за грешка в localhost е:

Notice: Undefined index: Page_Id in Page.php on line 8 

Защо работи на сървъра, а не в localhost?

Много търсех в Google, но не мога да намеря нищо.

  • Използвате WordPress? трябва да актуализирате URL адреса и постоянните връзки на сайта.
  • не използвам чист php
Options +Indexes +Includes +FollowSymLinks +MultiViews 

Защо изрично разрешавате MultiViews в конфигурацията на вашия сървър? Това вероятно е причината за проблема ви. Опитайте да премахнете +MultiViews от конфигурацията на вашия сървър (по-горе) и / или деактивирайте MultiViews в горната част на вашия .htaccess:

 Options -Indexes -MultiViews 

MutliViews е деактивиран при инсталиране на Apache по подразбиране, но някои (споделени) хостове изглежда го активират. Така че, деактивирането му в .htaccess разбира се вероятно се препоръчва.

(Но също така, защо давате възможност Includes - това наистина ли е необходимо? Тъй като използвате PHP, това е малко вероятно.)

Ефектът от MultiViews е забележим, защото ефективно сте премахнали разширението на файла, за да създадете вашите лесни за ползване URL адреси.

С активиран MultiViews (част от mod_negotiation) ... когато поискате Page/13/Page-Title, Apache се опитва да намери съвпадащ файл в текущата / основната директория, който съответства на основното име Page, като изпробвате различни разширения, които биха върнали подходящия тип mime. Това се случва преди mod_rewrite е в състояние да пренапише вашия приятелски URL адрес. И така, MultiViews в крайна сметка пренаписва заявката ви към Page.php без да предавате някой от параметрите на URL адреса (останалата част от URL адреса вероятно ще бъде видяна като PATH_INFO), следователно вашето PHP известие за „недефиниран индекс“.

(Въпреки че трябва да проверявате и за съществуването на това $_GET променлива във вашия PHP скрипт, което изглежда не правите.)

  • благодаря.работи, но сега имам друг проблем.когато посетя страница / 13 / заглавие на страницата, ако дължината на заглавието на страницата е по-малка от 5, тя работи, но за повече от 5 символа показва искания URL адрес страница / 13 / бла blah-blah-blah не бе намерен на този сървър.
  • Изглежда, че във вашето няма нищо .htaccess файл, който ще зависи от дължината на заглавието на страницата. (Всичко след като втората наклонена черта просто се предава на Page_Title Параметър на URL.) Проучете параметрите на URL, които Page.php получава - това според очакванията ли е? Не бих очаквал обаче заглавието на страницата да контролира коя страница се връща - бих очаквал Page_Id да контролира това?
  • http://localhost:8080/schoolarshop/Page/13/قوانین-و-مقررات горният URL адрес показва грешка, но http://localhost:8080/schoolarshop/Page/13/قوانینвърши работа
  • Може би проблем с кодирането на символи или логиката на приложението във вашия PHP / DB код от страна на сървъра? Както споменахме, в кода, който сте публикували (директиви на Apache) няма нищо, което да обясни това. Каква версия на Apache използвате?
  • 1 съжалявам, че го правя по грешен начин.промяна RewriteRule ^Page/(.*)/(.*)$ да се RewriteRule ^Page/([\s\S]*)/([\s\S]*)$ и се получи.благодаря ви за отговорите

е работил за вас: Charles Robertson | Искате ли да се свържете с нас?