Intereting Posts
Постоянный запуск скрипта PHP MySql Изменено дерево предзаказов для создания URL-адреса Установка демонстрационного приложения Yii 2 Как добавить скрипты и таблицы стилей внутри модуля yii Всплывающее окно JavaScript из формы Laravel 5.2 Создать объект FatalErrorException в AliasLoader.php line 63 Выполнение while / loop для получения 10 случайных результатов Как получить все переменные, определенные в текущей таблице / таблице символов? PHP – выполнить веб-скрипт как сценарий командной строки? PHP: проверять базу данных mysql каждые 10 секунд для любых новых строк CakeEmail в cakephp 2 может отправлять электронную почту одному и тому же smtp, но не swiftmailer в laravel Найти элемент массива, содержащий только определенный набор символов в PHP Не удается получить результаты от SearchQuery () в фратах SQLSTATE : Недопустимый номер параметра: количество связанных переменных не совпадает с числом токенов в строке 102 Невозможно передать значение параметра в репозиторий findOneBy Symfony

Модификация Rewrite и PHP

Я пытаюсь перенаправить страницы с помощью mod_rewrite на страницы с некоторыми переменными (для их использования с PHP $_GET ).

Чтобы привести пример с несколькими строками:

  • Когда пользователь вводит /c/stg он перенаправляется на item_show.php?id=$1&f=1 (где f – номер страницы).
  • Когда пользователь вводит /c/stg/2 он перенаправляется на вторую страницу с помощью show.php?id=$1&f=$2 .

Я думаю, что в моем файле нет ошибок или злоупотреблений, но вот что я хочу:

Я хочу, чтобы пользователь item_show.php?id=$1&f=1 / string напрямую, чтобы идти item_show.php?id=$1&f=1 с $1 это наша строка, конечно …

Но когда я изменяю свой файл, удаляя /c/ part из RewriteRule он начинает давать ошибки во всех других каталогах и не читает никаких файлов ( my.css ), хотя я уже определил RewriteCond %{REQUEST_FILENAME} !-f

Есть ли у вас какие-либо предложения? Или как я могу сделать эту систему возможной с любым методом?

 Options FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #user RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC] #marked RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC] #content RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC] RewriteRule ^c/([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC] 

Я ошибаюсь, если RewriteCond передается только в первый RewriteRule?

Попробуйте это вместо этого:

 Options FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #user RewriteRule ^u/([^/]+)/?$ profile.php?username=$1 [L,NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #marked RewriteRule ^marked/([^/]+)/?$ item_marked.php?id=$1 [L,NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d #content RewriteRule ^c/([^/]+)/?$ item_show.php?id=$1&f=1 [L,NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/([^/]+)/?$ item_show.php?id=$1&f=$2 [L,NC] 

Ура,

Директивы RewriteCond относятся только к первой следующей директиве RewriteRule . Так что в вашем случае два RewriteCond directcitves применяются только к первой директиве RewriteRule а не к другим.

Но вы можете использовать это правило абортов, чтобы выйти из процесса перезаписи, если запрос может быть сопоставлен с существующим файлом или каталогом:

 RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] 

Это приведет к тому, что следующие правила будут проверяться только в том случае, если запрос не может быть сопоставлен непосредственно с существующим файлом или каталогом.