htaccess重定向隐藏php扩展或传递参数

时间:2013-10-07 11:07:13

标签: php apache .htaccess mod-rewrite redirect

我使用主index.php文件来处理大部分请求,所以我的基本.htacess看起来像this one

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php?page=$1 [L]

但是我有一些请求(例如/ signin或/ signout)需要直接从.php文件中使用相同名称(/signin.php和/signout.php)处理。

所以我的.htaccess规则必须是:" if %{REQUEST_FILENAME}.php不存在重定向到/index.php?page=$1其他重定向到%{REQUEST_FILENAME}.php"。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

用以下代码替换您的代码:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L,NC]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php !-f
RewriteRule ^(.+)$ /index.php?page=$1 [L,QSA]

这会将所有内容发送到/index.php,这不是有效的文件或目录,并且文件系统中没有匹配的.php

答案 1 :(得分:-1)

您可以在index.php中处理此问题,只需重定向index.php上的每个调用。在那里,您可以阅读URL中给出的所有参数。

$aParams = explode("/", $_SERVER["REQUEST_URI"]);

现在,您可以处理所有参数并在需要时重定向。