这是我当前的.htaccess文件:
DirectoryIndex requestHandler.php
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ requestHandler.php?/$0 [L,QSA]
我想将alle请求重定向到" requestHandler.php"。它现在有效,但也可以通过直接链接访问网站,我也不想这样做。
例如: 它现在适用于" ... / api / register" ,但你也可以访问它,但去" ... / register.php"那是不可能的。它应该只能通过" ... / api / register"来到register.php。
我想我之前有过这样的工作,但是当我继续编辑时,我似乎搞砸了。
requestHandler.php应该正常工作,当我输入" ... / register.php"它根本没有重定向到requestHandler,但如果我输入" ... / registe.php"或" ... / register.ph"它被重定向到那里。
任何解决方案?
答案 0 :(得分: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]
你可以将它合并到一个规则块中,但至少这样它是非常易读的。仅在请求的文件不是文件或目录时才检查第二个规则块。