我是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
答案 0 :(得分:1)
你需要对%{REQUEST_FILENAME}
进行先发制人的检查,然后用.php查看是否存在之前你试图重写它,否则URI就像戴尔将被盲目改写:
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [L]