конфликт перенаправления .htaccess между двумя страницами

#php #.htaccess #redirect

#php #.htaccess #перенаправление

Вопрос:

ниже приведена моя структура каталогов.

 |--inc (folder)
   |-->header.php
   |-->footer.php
|--css (folder)
|--js (folder)
|--images (folder)
|--index.php
|--product.php
|--items.php
  

все файлы php index.php , product.php items.php используются для включения файлов в inc папку

Теперь я использую .htaccess для перенаправления моего использования, например, я хочу, чтобы некоторые файлы перенаправлялись на product.php , а некоторые файлы на item.php .

Первый подход

 <IfModule mod_rewrite.c>
    Options  FollowSymLinks
    RewriteEngine On

   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteCond %{SCRIPT_FILENAME} !-f


   RewriteRule ^([A-Za-z0-9-] )$ ./product.php?fd=$1 [L,NC,QSA]
   RewriteRule deal/([A-Za-z0-9-] )$ ./item.php?id=$1amp;id2=$2 [L,NC,QSA]


</IfModule>
  

При таком подходе URL содержимого (CSS, JS, изображений, файлов .php) также перенаправляется и изменяется на / deal / css или / deal / images и т.д. В моем item.php файле, но там нет имени папки deal .я просто добавил deal , чтобы устранить конфликт между двумя перенаправлениями

Второй подход

 <IfModule mod_rewrite.c>
    Options  FollowSymLinks
    RewriteEngine On

    # first try to see if belongs to item.php based on URI pattern
    RewriteRule ^([a-z0-9-] )/([a-z0-9-] )$ ./item.php?idd=$1amp;id=$2 [L,NC,QSA]

    # No try /j/display.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-z0-9-] )$ ./product.php?fd=$1 [L,NC,QSA]
</IfModule>
  

В этом коде также была такая же проблема

пожалуйста, помогите!!! приветствуется любая помощь..

Ответ №1:

Проблема не в том, что ваши правила переписывают запросы для вашего css, изображений или javascript, а в том, что вы используете относительные ссылки в своем контенте, и /deal/ часть URL-адреса заставляет браузер думать, что вы * на самом деле хотите, чтобы ваши скрипты / изображения / css находились в /deal/ папке. Вам нужно сделать ваши ссылки абсолютными URL-адресами или добавить относительную базу URI в заголовок вашей страницы:

 <base href="/" />
  

Комментарии:

1. спасибо, что ответили на мой вопрос, но не могли бы вы, пожалуйста, уточнить это? Я новичок во всем этом.

2. а также я не могу указать абсолютный путь из-за следующих предупреждений Warning : include(): http:// оболочка отключена в конфигурации сервера с помощью allow_url_include=0 в C:xampphtdocsshopitem.php в строке 2 предупреждение: включить( localhost/shop/admin/qconnect.php ): не удалось открыть поток: не удалось найти подходящую оболочку в C:xampphtdocsshopitem.php в строке 2 предупреждение: include(): сбой при открытии ‘ localhost/shop/admin/qconnect.php ‘ для включения (include_path=’.;xamppphpPEAR’) в C:xampphtdocsshopitem.php в строке 2

3. @Anonymous Когда вы переходите по URL-адресу, подобному: /deal/abcd1234 , и у вас есть URI, подобный этому, в содержимом страницы: <img src="images/1.png"> . Браузер должен «угадать», какова база URL-адресов, и он делает это, просматривая URL-адрес в строке местоположения (браузер совершенно не имеет представления о перезаписи на сервере или о том, где на самом деле находится содержимое), и он видит /deal/ , поэтому он использует это в качестве базы URL-адресов и добавляет это ко всем относительным URL-адресам в содержимом, делая его похожим: /deal/images/1.pmg