【问题标题】:Rewriting URL over a file .htaccess通过文件 .htaccess 重写 URL
【发布时间】:2016-06-20 13:10:14
【问题描述】:

这是我的问题。 只有当文件不存在时,我才知道如何重写 URL。 但是我遇到了一个以前从未遇到过的问题。

给定网址:http://www.my-host.com/agences/my-agencies

在目录根目录下有 2 个文件:

  • agences.php
  • .htaccess

在 .htaccess 中:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^agences/(.*) /agences.php?agence=$1

这不会重定向到 /agences.php,甚至不会被解释。 如果我将 RewriteRule 更改为:

RewriteRule ^agences/(.*) $1

它甚至不处理重写规则。 所以即使我像这样在正则表达式条件前加上斜线:

RewriteRule ^/agences/(.*) $1

我在 apache 2.4.10 上运行,AllowOverride 全部在 vhost 中配置。

感谢您的帮助。

【问题讨论】:

  • 您在请求 /agences/ 时是否收到 404 错误?
  • 是的,如果我点击http://www.my-host.com/agences/,我会收到 404 错误

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

在代码开头添加:

Options -MultiViews

MultiViews 的效果如下:如果服务器收到一个 请求 /some/dir/foo,如果 /some/dir 启用了 MultiViews,并且 /some/dir/foo 不存在,则服务器读取目录 查找名为 foo.* 的文件,并有效地伪造类型映射 它命名所有这些文件,为它们分配相同的媒体类型和 如果客户要求其中之一,它将具有的内容编码 他们的名字。然后它选择与客户的最佳匹配 要求。 http://httpd.apache.org/docs/2.0/en/content-negotiation.html

【讨论】:

  • 非常感谢,我没有注意到 MultiViews 选项可能是 mod_rewrite 中的问题
猜你喜欢
  • 2019-02-23
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多