我正在尝试同时删除.php扩展名。例如,以“ http://localhost/timetable/login”代替“ http://localhost/timetable/login.php”
但也有
“ http://localhost/timetable/38/”代替 “ http://localhost/timetable/index.php?week=38”
我可以使一个或另一个工作,但不能同时工作。我认为这是因为他们之间存在冲突,但我还没有找到足够的进展。
这是我的.htaccess文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
RewriteRule ^([0-9]+)$ index.php?week=$2
RewriteRule ^([0-9]+)/$ index.php?week=$2
如果我在地址栏中输入“ http://localhost/timetable/38”,则将我带到“ http://localhost/38/”,并且出现“找不到对象”错误。
有人知道是什么问题吗?
更新: 我现在可以转到页面,但
echo $_GET['week'];
返回空结果,因此它点燃了“ http://localhost/timetable/40”中的40。
答案 0 :(得分:0)
尝试获取一周时,您只有一个捕获组。因此应该是$ 1而不是$ 2。
根据this test tool,以下操作应该有效:
RewriteRule ([0-9]+)/?$ index.php?week=$1
我会做这样的事情:
# rewrite if url ends with a number and possibly a slash
RewriteRule ([0-9]+)/?$ index.php?week=$1 [QSA,L]
# do not append .php if it already ends with .php, other add .php
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ $1.php [QSA,L]
答案 1 :(得分:0)
您应该考虑将所有输入作为单个字符串路由到某个php文件,而不是对每个输入使用单独的重写规则。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?page=$1 [L,QSA]
然后在您的php文件中,您可以将字符串分隔为输入,并根据需要使用它们。
<?php
$inputs = explode('/', $_GET['page']);