【问题标题】:Rewrite rule to hide extension .htaccess重写规则以隐藏扩展名 .htaccess
【发布时间】:2022-01-02 12:54:24
【问题描述】:

我试图从链接中隐藏.php 文件的扩展名

例如www.example.com/about.php 显示www.example.com/about

我做了什么

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L] 

而且效果很好。

但我有另一个链接 example.com/news.php?id=45 根据上面的规则,我可以访问链接像

example.com/news?id=45 without .php

但我想隐藏id=45我想要这样example.com/news/45

我做了什么RewriteRule ^news.php?id=([0-9]+) /news/$1 [NC,L]

但它不起作用我收到 500 内部服务器错误

【问题讨论】:

  • 500 Internal Server Error 是一条通用错误消息,通知您服务器在处理请求时崩溃。除此之外,它(故意)毫无意义,并且对调试几乎没有用处。您需要检查服务器上的错误日志以尝试查找底层异常消息。一旦你明白了,你就有机会发现问题。
  • 嗨@ADyson 错误因为代码RewriteRule ^news.php?id=([0-9]+) /news/$1 [NC,L] 当我删除它时一切正常,并且错误日志中没有任何内容
  • 您查看了哪个错误日志?阿帕奇? php?由于 htaccess 是 Apache 的一部分,如果您正确配置了日志记录,则 Apache 日志中应该有信息。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

试试这样吧:

# MultiViews must be disabled for "/news/45" to work
Options -MultiViews

RewriteEngine on

# Rewrite "/news/45" to "news.php?id=45"
RewriteRule ^news/(\d+)$ news.php?id=$1 [L]

# Handle extensionless ".php" URLs
RewriteCond %{REQUEST_URI} !\.\w{2,3}$
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.*) $1.php [L]

您的 500 Internal Server Error 实际上是由您“隐藏”.php 扩展名的原始指令引起的,而不是您的“新”指令(实际上并没有做任何事情)。您的原始指令会将/news/45 的请求重写为/news/45.php/news/45.php.php 等。创建一个重写循环(500 错误)。

请参阅 my answer 对 ServerFault 的以下问题,详细解释此行为:https://serverfault.com/questions/989333/using-apache-rewrite-rules-in-htaccess-to-remove-html-causing-a-500-error

我做了什么RewriteRule ^news.php?id=([0-9]+) /news/$1 [NC,L]

但它不起作用我收到 500 内部服务器错误

这个指令的逻辑是颠倒的,并且永远不会真正匹配请求的 URL(或 anything 就此而言),所以实际上不会做 anything。但是,它在语法上是可以的,所以不会触发错误。

只要请求 /news/45(使用您的原始指令)就会发生 500 错误,无论该指令是否存在。

【讨论】:

  • 好的,谢谢你,现在我可以访问页面example.com/news/45,但 CSS 不起作用。 @MrWhite
  • @MohammedJuma 您可能正在使用相对 URL 指向您的 CSS 文件。如果您要重写多个 URL 路径深度,则不能使用相对 URL,就像您在此处所做的那样。请参阅my answer 对网站管理员堆栈上的以下问题:.htaccess rewrite URL leads to missing CSS 了解更多详细信息。
  • 谢谢,兄弟,现在一切正常。
  • @MohammedJuma 不客气。我更新了我的答案,对新指令以及原始指令发生的情况和 500 错误进行了更多解释。
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 2012-12-24
  • 2017-01-07
  • 1970-01-01
  • 2013-08-13
  • 2011-08-29
  • 2013-03-12
  • 1970-01-01
相关资源
最近更新 更多