【问题标题】:pretty url using htaccess rewriterule casuing "internal server error"漂亮的 url 使用 htaccess rewriterule 导致“内部服务器错误”
【发布时间】:2012-09-04 16:34:45
【问题描述】:

我的 .htaccess 文件:

RewriteEngine On

RewriteRule ^([a-zA-Z0-9_-]+)$ photo.php?id=$1

RewriteRule ^([a-zA-Z0-9_-]+)/$ photo.php?id=$1

我的目标是将网址mysite.com/photo.php?id=31 转换为mysite.com/31。但是当我访问mysite.com/31 时,我得到的只是:

内部服务器错误

服务器遇到内部错误或配置错误,并且 无法完成您的请求。

请联系服务器管理员 admin@localhost 并告知 错误发生的时间,以及您可能做过的任何事情 这可能是导致错误的原因。

有关此错误的更多信息可能在服务器错误中可用 记录。

我在 wamp 服务器上运行它。

编辑:

我当前的网址如下所示:http://localhost:8080/img/photo.php?id=1。我需要将/img-part 添加到 htaccess 吗?

【问题讨论】:

  • 这个 htaccess 文件在哪里,在您的文档根目录中还是在 /img/ 目录中?你在其他地方还有其他规定吗?
  • @JonLin 位于 /img/ 文件夹中。其他地方没有其他规则
  • 所以你在/img/ 目录中有这个htaccess 文件,但你希望在你的文档根目录中进行重写(例如mysite.com/31)?
  • @JonLin 在这种情况下,根是 /img/。网址有点误导
  • 还是你真的想重写 URL 之类的:mysite.com/img/31

标签: php .htaccess mod-rewrite


【解决方案1】:

如果您希望能够通过 URL http://mysite.com/31 访问图像,请注意,URL 中没有 /img/ 目录,您需要将重写规则放在文档根目录的 htaccess 文件中。 img 目录所在的目录。由于我还将假设您的站点上除了图像之外还有其他内容,因此您将要检查是否正在重写不针对图像的请求,您可以通过检查 %{REQUEST_FILENAME} 以及 !-f!-d 标志来做到这一点。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /img/photo.php?id=$1 [L]

另外,如果您尝试通过以下 URL 访问您的图像,您现有的规则就很好:http://mysite.com/img/31,还有其他原因导致您的 500 服务器错误。 请确保已加载重写模块。在 WAMP 中,右键单击 WAMP 图标并转到 apache,然后选择 apache module 并确保选中 rewrite module

【讨论】:

  • 谢谢!它被关闭了。我面临的问题是,现在我的项目托管在我的 wamp 文件夹的子目录中。但是当我将它移动到我的真实主机时,我不会以 /img/ 为基础。但我想我在移动网站时必须调整规则。
  • @Johan 您在移动站点时不需要调整您的基础,只需从上面的规则目标中删除/img(这基本上就是您最初的目标)。
【解决方案2】:

试试这个

<IfModule mod_rewrite.c>    
    Options +FollowSymLinks    
    RewriteEngine On

    RewriteRule ^([a-zA-Z0-9_\-]+)$ photo.php?id=$1    
</IfModule>

【讨论】:

  • - 是否位于字符跨度之间,则无需转义。
猜你喜欢
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2015-04-19
  • 2015-11-23
  • 2010-10-07
  • 2014-12-14
  • 2019-04-15
  • 1970-01-01
相关资源
最近更新 更多