3

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

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

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

所以我的 .htaccess 规则需要是:“if %{REQUEST_FILENAME}.php不存在重定向到/index.php?page=$1否则重定向到%{REQUEST_FILENAME}.php”。

我怎样才能做到这一点?

4

2 回答 2

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的文件。

于 2013-10-07T13:31:23.403 回答
-1

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

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

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

于 2013-10-07T11:14:34.560 回答