这是我当前的.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]
您可能可以将其合并为一个规则块,但至少这样它非常可读。只有当请求的文件不是文件或目录时,才会检查第二个规则块。