.htaccess不会将直接链接重定向到.php文件

时间:2015-03-05 13:38:25

标签: php .htaccess redirect rewrite

这是我当前的.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"它被重定向到那里。

任何解决方案?

1 个答案:

答案 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]

你可以将它合并到一个规则块中,但至少这样它是非常易读的。仅在请求的文件不是文件或目录时才检查第二个规则块。