.htaccess没有';t将直接链接重定向到.php文件


.htaccess doesn't redirect direct link to .php files

这是我当前的.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",这应该是不可能的。应该只能通过"…/api/register"访问register.php。

我想我以前也用过,但当我继续编辑时,我似乎把它搞砸了。

requestHandler.php应该工作正常,当我输入"…/register.php"时,它根本不会重定向到requestHandler,但如果我输入"../registerphp"或"…/reregister.ph",它会重定向到那里。

有什么解决方案吗?

您发布的规则只是检查文件/目录是否存在,如果不存在,则重定向到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]

您可能可以将其合并为一个规则块,但至少这样它非常可读。只有当请求的文件不是文件或目录时,才会检查第二个规则块。