.htaccess не перенаправляет прямую ссылку на .php файлы

0

Это мой текущий файл.htaccess:

DirectoryIndex requestHandler.php

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ requestHandler.php?/$0 [L,QSA] 

Я хочу перенаправить все запросы на "requestHandler.php". Он работает сейчас, но также можно получить доступ к сайтам с прямой ссылкой, и я не хочу этого.

Например: теперь он работает с ".../api/register", но вы также можете получить к нему доступ, но переходите к ".../register.php", и это должно быть невозможно. Допустимо перейти в register.php на ".../api/register".

Я думаю, что у меня было это раньше, но, продолжая редактирование, я, казалось, испортил это.

requestHandler.php должен работать правильно, и когда я вхожу в ".../register.php", он вовсе не перенаправляется на requestHandler, но если я введу ".../registe.php" или ".../register. ph ", он перенаправляется туда.

Любые решения?

Теги:
.htaccess
redirect
rewrite

1 ответ

1
Лучший ответ

Правило, которое вы публикуете, проверяет только, существует ли файл/каталог, а если нет, то перенаправляйте запрос requestHandler.php. Поэтому, естественно, если существующий файл указан в URL-адресе, он не будет перенаправлен.

Если вы хотите, чтобы все файлы ".php" также перенаправлялись, вам понадобятся более конкретные правила перезаписи. Что-то вроде этого может быть:

DirectoryIndex requestHandler.php

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ requestHandler.php?/$0 [L,QSA]

RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule ^(.*)$ requestHandler.php?/$0 [L,QSA]

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

  • 0
    Спасибо! Работает отлично. Я решил переместить весь свой проект в подпапку, и у меня возникли некоторые проблемы с его работой, но я понял это. Так что для тех, кто хочет знать, как это делается в RewriteBase /subfolder/ используйте: RewriteBase /subfolder/ NOT RewriteRule ^(.*)$ subfolder/requestHandler.php?/$0 [L,QSA]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню