【问题标题】:.htaccess file RewriteRules not working.htaccess 文件 RewriteRules 不起作用
【发布时间】:2015-06-04 12:22:58
【问题描述】:

这个问题在 StackOverflow 上被回答了无数次,我确实搜索了很多,但似乎没有任何答案适合我。我已经阅读了this article,并发现了为什么添加Options +FollowSymlinks,这对我来说是RewriteRules 工作所必需的(我的主机在根级别自动启用了它)。所以我从我的文件中删除了它,并尝试了重写引擎是否可以工作。确实如此,但没有任何正则表达式的东西。所以我在http://example.com/hta.php?id=something&jmeno=somethingelse 建立了一个测试网站,并将以下内容添加到我的.htaccess 文件中:

RewriteEngine On

RewriteRule ^testdis/([0-9]+)/([a-z]+) http://example.com/hta.php?id=$1&jmeno=$2 [NC]

这应该使我能够访问http://example.com/testdis/5/s 并像前面提到的http://example.com/hta.php?id=5&jmeno=s 一样工作,但它会将地址重写为 URL 选项卡中第二个不需要的地址。

所以我的问题是:为什么我的重写规则不起作用,我该如何让它起作用?

编辑:添加[R] 参数使我能够在我的浏览器中输入“漂亮”的网址,并在按下输入时将我重定向到具有工作值的“旧/丑陋”页面。但是我希望它显示“不错”的网址。

编辑 2:我被要求发布我的 hta.php 文件的代码。我不认为它无论如何重要,但它在这里

<?php
  echo '<meta charset="UTF-8">';
  if(isset($_GET['id'])){
  $id = $_GET['id'];
  }
  if(isset($_GET['jmeno'])){
  $jmeno = $_GET['jmeno'];
  }
?>
<!DOCTYPE html>
<html lang="cs">
    <head>
    <title>Test</title>
    </head>
    <body>
  <?php echo $id; ?>
  <br /><br />
  <?php echo $jmeno; ?> 
  </body>
</html>

【问题讨论】:

  • 在这种情况下这并不重要,因为您正在重写同一个域(Apache 应该剥离协议/域),但对于内部重写,您不应该真正指定协议/域。只需/hta.php?id=$1&amp;jmeno=$2。这里需要L 标志吗?虽然如果它是唯一的指令,它应该没关系。尝试将其更改为临时重定向 (R) 以确保它正确重写。我假设您在 .htaccess 中没有其他内容?
  • 您发现什么有效?您是否以任何形式成功使用了RewriteRule 指令? “......并尝试过 Rewrite 引擎是否可以工作。它确实可以,但是” - 它以什么方式“工作”?
  • @w3d 我将尝试更改标志,我将编辑此评论,或写另一个。是的,我已成功使用 RewriteRule 将所有 .html 文件重定向到 .php 文件(在我发布的同一指南中阅读)
  • 标志之间不应该有空格,应该是[NC,R],而不是[NC, R]——这会导致500错误。 (空格是 Apache 配置文件中的分隔符。)您还有哪些其他标志?你能发布hta.php 的实际.htaccess 和内容吗?没有充分的理由说明内部重写不起作用。
  • 好吧,我很难过。但是,我肯定会将 RewriteRule 替换更改为根相关(如第一条评论中所述)。 IE。 RewriteRule ^testdis/([0-9]+)/([a-z]+) /hta.php?id=$1&amp;jmeno=$2 [L] 会更好。

标签: php regex apache .htaccess mod-rewrite


【解决方案1】:

对于内部重写,RewriteRule 替换不应包含方案和主机名,因此以下是更可取的(并且在这种情况下似乎可以解决问题):

RewriteRule ^testdis/([0-9]+)/([a-z]+) /hta.php?id=$1&jmeno=$2 [L]

通常,如果您指定绝对 URL,它将隐式触发外部重定向(就像您已明确使用 R 标志一样)。虽然,the docs state 如果主机名与当前主机匹配(据我所知,在这种情况下),重写引擎应该自动从替换中删除方案和主机名。

参考:
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewriterule

但是,根据我的经验,这似乎不会发生,替换中的绝对 URL 总是 会导致外部重定向,无论主机名如何。 (?)

【讨论】:

  • 我忘记编辑掉“404 错误”。这是因为我测试错了,在第一个参数中提供了一个字母而不是数字。将其编辑出来。
猜你喜欢
  • 2013-04-14
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多