这是地址栏上的链接:
durnitibaz.com/news.php?n=ACC-raid-on-passport-office-3-brokers-jail-fine
这是.htaccess的代码:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^news/([0-9] + )/([0-9a-zA-Z_-]+) news.php?n=$1 [L]
现在我不明白这个代码出了什么问题。因为当我试图访问数据库中的新闻时,这是不起作用的,比如地址栏中的url:
durnitibaz.com/news/ACC-raid-on-passport-office-3-brokers-jail-fine
这是显示404错误。
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^news/([0-9] + )/([0-9a-zA-Z_-]+) news.php?n=$1 [L]
这里有很多错误:
- 在此上下文中,正则表达式(带有未标注空格(在语法上无效
- 正则表达式是完全错误的(即使"已更正"(-它与请求的URL不匹配。不存在";id";(第二个路径段(。但是对于目标URL来说,这似乎不是必需的
- 检查请求是否映射到
.php
文件的第二个条件(RewriteCond
指令(对于这样的请求永远不会成功,因此该规则也将因此而失败 - 检查请求是否未映射到目录的第一个条件似乎是不必要的
请尝试以下操作:
RewriteRule ^news/([w-]+)$ news.php?n=$1 [L]
这与您发布的示例URL相匹配。例如CCD_ 3并且在内部将请求重写为CCD_。
前面的RewriteCond
指令不是必需的。
简写字符类w
与[0-9a-zA-Z_]
相同。
注意字符串锚的末尾($
(-这可以确保您不会匹配太多(例如,包含文件扩展名的实际文件(,从而导致多对一重写。