【问题标题】:htaccess rewrite resulting in 500 Internal Server Errorhtaccess 重写导致 500 内部服务器错误
【发布时间】:2012-09-02 18:08:09
【问题描述】:

我正在尝试使用 htaccess 获取漂亮的 url,用于 SLIR 图像调整插件。

我想重写如下内容:

重写之前:
localhost/img/600x400/slider/image.jpg

重写后
localhost/application/public/slir/index.php?r=slir&w=600&h=400&i=img/slider/image.jpg

但以下代码返回 500 Internal server error...

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /

RewriteRule ^(.*)/([0-9]{1,4})x([0-9]{1,4})/(.*)\.(gif|jpg|jpeg|png) application/public/slir/index.php?r=slir&w=$2&h=$3&i=$1/$4.$5 [NC,NE,QSA,L]

</IfModule>

请帮帮我.....


更新

我以为是文件权限问题... 所以我检查了所有相关的目录和文件,令人惊讶的是全部是 755/644。
然后我直接查看了/application/public/slir/index.php。它无法访问。

我在同一个 slir 目录中创建了另一个名为 hello.php 的文件,并且 hello.php 可以访问。
然后我将 SLIR 目录移动到另一个名为 public 的文件夹中。在这里,index.phphello.php 都可以访问。

之后,我将 SLIR 目录移回原来的 scripts 文件夹。在 scripts 文件夹中,hello.php 可访问,但 index.php 不可访问。
现在,这两个文件具有相同的权限并且在同一个文件夹中.. 我不知道这里发生了什么... :/ :/

有人请帮帮我......

【问题讨论】:

  • 如果你只是尝试打开 localhost/application/public/slir/index.php?r=slir&w=600&h=400&i=img/slider/image.jpg 会发生什么,你仍然得到 500 吗?如果是这样,您可能有一些简单的权限问题,其中文件不是 644/755。
  • 当我在本地主机上使用它时,它工作正常......但是当我将我的网站上传到 subdomain.example.com 时,它再次给出 500 内部错误。 ..我无法理解的问题是什么.. :(
  • @IRISIndigo 我已经更新了这个问题。请阅读原帖中的更新...
  • 添加了新答案 - 正确的答案...
  • 如果您收到错误 500,请告诉我们 /var/log/apache2/error.log 中的内容

标签: .htaccess


【解决方案1】:

如果其他人在看这个 - 我发现的问题是 htaccess 文件中的这两行:

php_value auto_prepend_file none

&

php_value auto_append_file none

有些服务器不允许它们。

将它们移动到我的php.ini 文件为我解决了这个问题:

auto-prepend-file = none

auto-append-file = none

【讨论】:

  • 对于其他人来说,这是最简单、最好的答案。
【解决方案2】:

这可能是因为您正在使用基于 Windows 的编辑器(如记事本)编辑 .htaccess 文件。记事本向文件中添加了一些您看不到的字符,但它们与 .htaccess 混淆了。我建议使用像 Notepad++ 这样的编辑器并将模式设置为 Unix,这样它就不会弄乱服务器了。 从技术上讲,这是因为 Linux 和 Windows 具有不同类型的 EOL(行尾),因此记事本会在每行的末尾添加一些字符以转到下一行,但 Unix 不会识别它们,因为它有自己的EOL 的类型..

【讨论】:

  • 如果是这种情况,我认为问题更多在于记事本在文件开头添加的 BOM(字节顺序标记),而不是引入 CRLF 换行的事实。字节顺序标记是文件开头的两个字节,记事本不会显示。
  • 转到编辑并将 EOL 转换更改为 Unix,看看您的问题是否已解决?
【解决方案3】:

查询字符串中通常禁止使用斜杠,但您可以通过设置启用它们 AllowEncodedSlashes 指令。

您可能还希望您的重写规则对斜杠使用百分比编码(即 %2F),因此在重写后: localhost/application/public/slir/index.php?r=slir&amp;w=600&amp;h=400&amp;i=img%2Fslider%2Fimage.jpg

另见How do you configure apache php to accept slashes in query strings

【讨论】:

  • 感谢您的回答,但我认为我的 apache 已经配置为接受查询字符串中的斜杠
【解决方案4】:

重复,措辞非常不同:

Has anyone used Smart Image Resizer on subdomain sites?

问题是子域...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    相关资源
    最近更新 更多