RewriteEngine - Как игнорировать запросы для папок, которые уже существуют - PullRequest
0 голосов
/ 08 ноября 2018

Что бы я хотел, если бы пользователь ввел: www.mysite.com/test Это перенаправит на страницу, которая будет искать в моей базе данных событие под названием test, и, если событие существует, покажет событие, перенаправляющее на страницу поиска.

Мне почти удалось заставить это работать - так близко, пока так далеко ...

Вот где я должен:

RewriteEngine On     
RewriteRule    ^([A-Za-z0-9-]+)/?$    show_events.php?q=$1    [NC,L] 

Это работает в том смысле, что он перенаправляет на страницу show_events.php, которая ищет в БД точное совпадение и отображает событие, если оно находит, иначе оно перенаправляет на страницу поиска. Я очень доволен этим.

Проблема в том, что когда папка (www.mysite.co.uk/test/) уже существует, на странице ошибки появляется сообщение «эта страница не работает». Папка просто содержит HTML-страницу, которая отображает слово «привет». Если вы наберете www.mysite.co.uk/test/index.html, страница отобразится нормально, поэтому не похоже, что она не работает.

Я пришел к выводу, что страница поиска работает нормально, а код RewriteEngine - нет.

Этот пост выглядел так, как будто решил мою проблему, но не совсем: Apache RewriteEngine - переписать все, что не существует, в index.php

Я думал, что добавление DPI в конце RewriteRule может решить проблему, но это не так.

Я действительно не понимаю RewriteEngine и просто бродю в темноте, используя метод проб и ошибок, может кто-нибудь мне помочь?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

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

RewriteEngine On
RewriteCond ℅{REQUEST_FILENAME} !-d     
RewriteRule ^([A-Za-z0-9-]+)/?$    show_events.php?q=$1  [NC,L]

RewriteCondition предотвратит перезапись существующих каталогов в URL назначения правила.

0 голосов
/ 08 ноября 2018

Вы можете просто добавить условие, чтобы не трогать существующие папки

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)/?$ /show_events.php?q=$1 [NC,L] 
...