【问题标题】:Rewrite Rule is not working well重写规则运行不佳
【发布时间】:2014-06-07 17:22:20
【问题描述】:

我正在研究 Apache 的重写规则,而不是使用 .htaccess,而是使用虚拟主机设置来编写它们。

这里我有两个问题:

  1. 我可以使用“RewriteRule blog_rss.xml blog_rss.php”但不能使用“RewriteRule ^blog_rss.xml$ blog_rss.php”,为什么?

  2. 即使第一个脚本正在运行,它也不会更改为我想要的 RSS 样式。我应该使用重写规则为其设置处理程序吗?

感谢您回答这个问题。

更新:这里是关于重写规则的脚本。

<Directory />
 <IfModule mod_rewrite.c>
  RewriteEngine On
  ErrorDocument 404 /error/404.php
  RewriteRule ^blog_rss\.xml$ blog_rss.php
 </IfModule>
</Directory>

【问题讨论】:

  • ^blog_rss.xml$ 是一个特定的匹配项,因为 .htaccess 位于您域的根文件夹中,它只会在 URL 为 http://domain.com/blog_rss.xml 时匹配,是这样吗?结果页面如何显示 RSS,您可以通过更改标题输出来修复 PHP 代码。
  • 嗯,我用的是虚拟主机设置,不知道是不是和.htaccess的设置一样。那么这是否意味着 ^blog_rss\.xml$ 不适合 VS 设置?此外,所以我发现第二个问题只是使用 Chrome,但 Firefox 运行良好。
  • 如果您直接在virtualhost 上使用它,那么可以。这是错误的,因为在 virtualhost 上它以 / 开头,所以它必须是 ^/blog_rss.xml$ 而不是你所拥有的。
  • 我已尝试将其更改为 ^/blog_rss.xml$ 和 ^/blog_rss\.xml$ 但它们仍然无法正常工作...
  • 好吧,在不进一步了解您还有哪些其他规则以及您尝试使用它的域和文件夹布局的情况下,很难说。

标签: apache mod-rewrite url-rewriting apache2 rewrite


【解决方案1】:

不,您不应该设置handler。这样做将强制blog_rss.php 处的 PHP 代码作为 XML 执行。这将导致整个文件以 XML Mime 类型响应,这可能会带来重大的安全问题

但是,在完成响应之前,您可能希望在 blog_rss.php 文件中将响应类型设置为 RSS 文件的类型。

blog_rss.php

header('Content-Type: text/xml');

虚拟主机

<Directory />
 <IfModule mod_rewrite.c>
  RewriteEngine On
  ErrorDocument 404 /error/404.php
  RewriteRule ^blog_rss\.xml$ blog_rss.php
 </IfModule>
</Directory>

资源:electrictoolbox.com

【讨论】:

    【解决方案2】:

    感谢您的回答。对于V-host,我终于找到了原因。

    根据RewriteRule in htaccess vs httpd.conf,目录路径应与网站基本路径相同。比如根目录是/var/www/,&lt;Directory&gt;应该设置/var/www/,否则会检测到服务器的根路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2010-09-18
      相关资源
      最近更新 更多