【问题标题】:Apache - Redirect All Traffic without ModRewriteApache - 在没有 Mod_Rewrite 的情况下重定向所有流量
【发布时间】:2014-01-21 12:24:20
【问题描述】:

我正在尝试将所有传入请求重定向到/index.php(以? 开头的请求除外,例如/?foo=bar

ModRewrite 当然可以轻松解决这个问题,但是还有其他解决方案吗? 例如,我正在考虑创建一个手动 404 页面(在 PHP 中),该页面将手动重定向到 /index.php,但我不确定这是否/如何工作。

在 index.php 中获取来自原始 URI 的信息也很重要,例如当有人请求 domain.com/search-term 时,我需要 index.php 中的信息(“search-term”)。

【问题讨论】:

标签: php apache


【解决方案1】:

有趣的问题。即使是像 laravel 这样的框架也需要 RewriteRule 来将请求推送到 index.php,然后再从框架本身进行任何路由。

按照您的建议,我想了解所有情况,需要对 Apache 配置进行一些更改。

您将 404 页面重定向到 index.php 的建议可行,但 SEO 影响 id 假设将是可怕的。指向您网站的任何链接到 index.php 以外的任何页面都会在 HTTP 标头中产生 404 Not Found 错误(即使它显示 index.php)。

但是.. 说了这么多,如果你仍然想那样做,你会怎么做:

在 .htaccess 中

ErrorDocument 404 /index.php

这将使您的 404 未找到页面 index.php

您的重定向变量将位于 $_SERVER 数组中,并以 REDIRECT_ 为前缀

print_r($_SERVER); from a redirect 给了我(我删除了开头没有 REDIRECT_ 的所有键值对):

Array
(
    [REDIRECT_REQUEST_METHOD] => GET
    [REDIRECT_STATUS] => 404
    [REDIRECT_URL] => /blsah.html
)

所以 REDIRECT_URL 将是您用来从 domain.com/search-term 获取“搜索词”的内容

您可以在此处找到可能的重定向变量的更完整列表:

http://httpd.apache.org/docs/2.2/custom-error.html

【讨论】:

  • 感谢您详细说明 404 解决方案。我没有考虑 SEO 方面,实际上这是一个非常肮脏的解决方案。但可能它是没有 ModRewrite 的唯一选择。
【解决方案2】:

您需要使用某种路由组件,例如框架中存在的那些来处理重定向所有路由。例如,如果您使用的是 laravel 4,您可以在 routes.php 文件中执行以下操作:

    Route::any('/', function(){
        //Do Magic Stuff
    });

    Route::any('{all}', function($uri)
    {
        //Check query string here - redirect as necessary
        if (stripos($_SERVER['QUERY_STRING'], '?') !== false)
            //Redirect or do stuff depending on your use case
        else
            Redirect::to('/'); //Otherwise redirect to your homepage
    })->where('all', '.*');

all 将匹配所有路由并将它们重定向到您默认的第一条路由。有很多 php 框架可供您使用,甚至可以从头开始使用 - 这只是我发现使用起来很棒的一个框架。

感谢杰森刘易斯:Get all routes, Laravel 4
Laravel 路由:http://laravel.com/docs/routing

【讨论】:

  • 即使是像 laravel 这样的框架也需要 RewriteRule 来将请求推送到 index.php,然后再从框架本身进行任何路由
猜你喜欢
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2012-01-25
  • 2011-07-24
  • 2015-04-19
  • 2015-10-20
  • 2019-03-16
相关资源
最近更新 更多