EDIT: Этот вопрос был в основном решен путем ответа ниже, но он также поднял новый вопрос. Если я удалю «RewriteCond% {REQUEST_FILENAME}! = F» из файла .htaccess, я снова перенаправляется на файл stock.com/index.php?page=index.php, если я сделаю запрос на share.com/register. Я могу просто согласиться с тем, что он должен быть там, но я пытаюсь понять, почему удаление этой строки кода вызывает такое поведение. Я получаю, что он позволяет посетителям получать доступ к фактическим файлам, таким как изображения, но я не понимаю, как это связано с перенаправлением/перенаправлением URL-адреса, такого как stock.com/register. Если бы кто-нибудь мог объяснить, что я был бы очень признателен.Pretty URLs - Dot Causeing Error
Попытка получить красивые URL-адреса для работы на простом сайте MVC Я разрабатываю локально на Wampserver, только для учебных целей. У меня есть следующая настройка кода .htaccess, чтобы любой URL-запрос перенаправлялся обратно в контроллер index.php, который обслуживает различный контент на основе значения $ _GET 'страницы'.
RewriteEngine on
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !=D
RewriteCond %{REQUEST_FILENAME} !=F
RewriteRule ^([-\w.]+)$ index.php\?page=$1 [R=302,L]
У меня он установлен как R = 302, так что я могу видеть, где он перенаправляет меня. Имя хоста, на котором я настроил его, - это share.com. Если я пойду на сайт, это прекрасно работает. Но если я попытаюсь посетить сайт stock.com/register, я перенаправлен на сайт stock.com/index.php?page=index.php. Если я вырву точку из регулярного выражения, все будет хорошо, но тогда я не могу иметь имена страниц/файлов с точками в них. Не нужно, но я делаю это для обучения, поэтому я хотел бы знать, что это за решение. Я пробовал оба, избегая точки, а не. Благодаря!
'.' (точка) означает любой символ, кроме символов новой строки. Вероятно, вы имеете в виду буквальный '\ .'. – Xeoncross
Спасибо за ответ. Я пробовал это в обоих направлениях и получал тот же результат. Из того, что я читал, точка не является метасимволом внутри символьного класса, и поэтому не требуется экранирование. Это неправильно? – Joe
Нет, это правильно. Виноват. :) – Xeoncross