我有以下代码:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ $1/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)/$ $1.php
RewriteRule ^([^\.]+)/([^\.]+)/$ $1.php?id=$2
我遇到绝对URI的问题,它解决了。现在我想使用最后一行:
domain.com/query/ping/2/
到
domain.com/query/ping.php?id=2
我认为代码很好,但我仍然得到错误404.我应该给出一些重写条件吗?我搜索了这段代码但没有找到任何有用的东西。
答案 0 :(得分:0)
根据您在上一个问题中放置htaccess文件的位置,您可能需要这样的内容:
RewriteCond %{REQUEST_URI} ^/query/([^/]+)/([^/]+)/?
RewriteCond %{DOCUMENT_ROOT}/query/%1.php -f
RewriteRule ^ /query/%1.php?id=%2 [L]
重要的问题是您需要在URI的开头检查/query
。您拥有的内容^([^\.]+)/([^\.]+)/$
与/query
部分以及之后的2个路径名不匹配。你的正则表达式只匹配2个路径名。
行RewriteCond %{DOCUMENT_ROOT}/query/%1.php -f
类似于上面的条件,它检查所请求的PHP文件是否确实存在,否则不会盲目地重写。这种情况可以确保有人试图去:
http://domain.com/query/blahblahblahblah/blah
您的服务器不会返回404错误,指出/query/blahblahblahblah.php
不存在。