htaccess中的多个RewriteRule

时间:2012-08-10 08:21:49

标签: apache .htaccess mod-rewrite

我是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可以在两种情况下都有效 - PHP文件存在&不存在?

感谢您的意见和指导。

仅限Ritesh

1 个答案:

答案 0 :(得分:1)

你需要对%{REQUEST_FILENAME}进行先发制人的检查,然后用.php查看是否存在之前你试图重写它,否则URI就像戴尔将被盲目改写:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [L]