2

我是 PHP 和 Apache 的初学者。我正在尝试对我的网站使用 URL 重写,它可以具有以下 URI。

1. http://localhost:8080/home
2. http://localhost:8080/dell

对于第一个 URI,有可用的home.php文件,我使用以下重写规则编辑了 .htaccess 文件。

RewriteRule ^([^\.]+)$ $1.php [NC]

第二个 URI 是动态的 - 意味着没有可用于处理请求的dell.php 。所以我在 RewriteCond 之后写了。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ list.php?page=$1

所以总的来说,我的 .htaccess 文件是

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^([^\.]+)$ $1.php [NC] [N]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ list.php?page=$1

因此,当我请求localhost:8080/home时, home.php 得到了适当的响应,但是当我请求localhost:8080/dell时,响应了一个错误

“在此服务器上找不到请求的 URL /dell.php。”

我认为只有第一个 RewriteRule 优先,第二个甚至不被 Apache 服务器读取。更改顺序也不起作用。我的问题是我应该使用什么 RewriteRule(s) 可以在这两种情况下工作 - PHP 文件存在和不存在?

感谢您的意见和指导。

里特什

4

1 回答 1

1

在尝试重写之前,您需要先对 .php 进行先发制人的检查%{REQUEST_FILENAME},以查看它是否存在,否则像戴尔这样的 URI将被盲目重写:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [L]
于 2012-08-10T08:29:08.507 回答