【问题标题】:mod_rewrite - redirecting to several different PHP filesmod_rewrite - 重定向到几个不同的 PHP 文件
【发布时间】:2010-10-19 22:14:19
【问题描述】:

我希望将任何对 /files/ 的请求重定向到一个 php 脚本,并将所有其他请求(不是针对特定文件类型的)重定向到另一个。无论我尝试什么,我都无法让它发挥作用。这是来自我的 apache2 虚拟服务器配置文件:

<Directory /var/www/test/public>

RewriteEngine On
RewriteBase /files
RewriteRule ~files/(.+) file-handler.php?id=$1 [L,QSA]
RewriteRule !\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$ /index.php?page=%{REQUEST_URI}

</Directory>

我也试过这个:

<Directory /var/www/test/public>

RewriteEngine On
RewriteBase /
RewriteRule !\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$ /index.php?page=%{REQUEST_URI}
RewriteBase /files
RewriteRule ~files/(.+) file-handler.php?id=$1 [L,QSA]

</Directory>

【问题讨论】:

  • 不应该是“RewriteBase /”?
  • 我试过了,但没用

标签: php mod-rewrite apache2


【解决方案1】:

您是否使用过虚拟主机? 部分应该有“RewriteOptions Inherit”

【讨论】:

  • 这可能是答案,我正在使用虚拟主机,但我没有使用它。我会测试。
【解决方案2】:

好吧,我没有解决这个问题,但找到了解决方法——我只是重定向到一个 PHP 文件,然后在那里执行逻辑。不知道为什么我之前没有想到...

【讨论】:

    【解决方案3】:

    我认为您的问题与 RewriteBase 和/或 ~file 匹配有关。您是否尝试仅使用一个基础,并将其用于您的规则?不完全确定您正在尝试使用您的规则,但是

    RewriteEngine On
    RewriteBase /
    RewriteRule ^files/(.+) /file-handler.php?id=$1 [L,QSA]
    RewriteRule !.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$ /index.php [L,QSA]

    你可以直接在 PHP 中使用$_SERVER['REQUEST_URI']

    另一个尝试的路径是多个&lt;Directory&gt; 部分(一个用于子目录,一个用于根)。

    但是,正如您所指出的,只是插入单个 PHP 文件并在那里重定向通常更容易调试。

    【讨论】:

      【解决方案4】:
      RewriteCond ^files/(.*)\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$
      RewriteRule file-handler.php?id=$1 [L,QSA]
      RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
      

      未测试,但我认为它会起作用。

      第一行:匹配对 www.example.com/files/* 的任何请求。

      第二行:将匹配重定向到 file-handler.php?id=

      第三行:匹配其他所有内容

      【讨论】:

        【解决方案5】:

        试试这些规则:

        RewriteRule ^files/(.+) file-handler.php?id=$1 [L,QSA]
        RewriteCond %{REQUEST_URI} !\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$
        RewriteRule !^files/ /index.php?page=%{REQUEST_URI} [L]
        

        第一条规则匹配以files/开头的URI路径(没有上下文路径前缀,请参阅RewriteBase directive)的每个请求。第二个规则匹配路径既不以files/ 开头也不以列出的文件扩展名之一结尾的每个请求。

        【讨论】:

          猜你喜欢
          • 2023-03-15
          • 2013-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-26
          • 2014-07-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多