Я создаю веб-сайт, управляемый ajax, который использует html5 pushState() для сохранения структуры URL-адреса и обеспечения надежной перезагрузки страницы и т. д. Для этого я настроил свой htaccess таким образом, что любой путь к каталогу, начинающийся с заглавной буквы и не имеет завершающей косой черты, перенаправляется на некоторые
"domain.com/index.php?page=Путь к каталогу"
Итак, сейчас мои запросы переводятся как:
domain.com/Folder => domain.com/index.php?page=Папка
domain.com/Folder/ , domain.com/folder, domain.com/folder/ => (по умолчанию, без перезаписи)
Это делается моим файлом .htaccess (расположенным в корне домена) и имеет код:
# Enable Rewriting
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^((/?[A-Z][A-Za-z0-9]*)+[^/])$
RewriteRule ^((/?[A-Z][A-Za-z0-9]*)+[^/])$ index.php?page=$1
Это работало нормально, пока я не добавил пустой каталог с именем «Папка» и не посетил «domain.com/Folder» в своем браузере.
Раньше «domain.com/Folder» давал мне ожидаемое содержимое («domain.com/ index.php?page=Folder") и "domain.com/Folder/" выдавало мне ошибку 404, как и ожидалось, поскольку в корне документа не было каталога с именем "Папка".
Теперь мой ожидаемый результат был таким:
Браузер показывает "domain.com/Folder" в адресной строке, а сервер доставляет содержимое "domain.com/index.php?page=Folder" (так же, как и в случае, когда "Folder" не существует)
Но вместо этого:
Браузер показывает "domain.com/Folder?page=Folder"
Может ли кто-нибудь указать, что я делаю неправильно здесь? И, если возможно, как я мог бы это исправить?
*У меня нет других файлов htaccess ни в каком другом каталоге.
Редактировать: схема, кажется, работает нормально, когда я форсирую постоянное перенаправление [R=301], но, к сожалению, это меняет URL-адрес в адресной строке браузера.