.htaccess htaccess配置出错

6g8kf2rb  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(104)

地址栏上的链接如下:

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错误提示

sq1bmfud

sq1bmfud1#

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^news/([0-9] + )/([0-9a-zA-Z_-]+) news.php?n=$1 [L]

这里有许多不对劲的地方:

  • 正则表达式在此上下文中(带有未转义的空格)在语法上无效。
  • 该正则表达式是完全错误的(即使“更正”)-它不匹配所请求的URL。在所请求的URL中没有“id”(第二路径段)。但这似乎并不需要为目标URL无论如何。
  • 检查请求是否Map到.php文件的第二个 conditionRewriteCond指令)对于此类请求永远不会成功,因此规则也将因此失败。
  • 检查请求是否未Map到目录的第一个 * 条件 * 似乎是不必要的。

请尝试以下方法:

RewriteRule ^news/([\w-]+)$ news.php?n=$1 [L]

这与您发布的示例URL匹配。例如/news/ACC-raid-on-passport-office-3-brokers-jail-fine,并在内部将请求重写为/news.php?n=ACC-raid-on-passport-office-3-brokers-jail-fine
前面的RewriteCond指令不是必需的。
速记字符类\w[0-9a-zA-Z_]相同。
请注意字符串结尾锚($)-这确保您不会匹配太多(例如,包含文件扩展名的实际文件),从而导致多对一重写。

相关问题