【问题标题】:Redirecting all uri's to script possibly with htaccess可能使用 htaccess 将所有 uri 重定向到脚本
【发布时间】:2009-10-27 18:51:12
【问题描述】:

我正在尝试设计一个小型站点,其中大部分 (95%) 站点资产将通过家庭类型的 PHP 脚本传递,其余 5% 从子域托管(背景图片、徽标等)。我想要的是,每当调用一个页面时,比如说www.example.com/blog/My_trip_to_the_andes,将被调用的页面是 htdocs/nexus.php 并且该脚本将能够发现请求的 URI。脚本将根据该 URI 确定用户要求的内容并生成它。随着重定向的发生,需要维护标头,因此脚本会接收任何 POST 数据或 COOKIE 数据。

我相信我可以通过站点根目录中的 .htaccess 来完成此操作。但我几乎没有使用 .htaccess 的经验,而且 documentation 似乎没有说明这一点。

这是个好主意吗?我希望每个页面请求都通过一个脚本,这样我就可以记录、进行一些 404 跟踪和重定向、门控跨站点资源请求以及我什至无法考虑的事情。

【问题讨论】:

  • 你尝试过 mod_rewrite 了吗?

标签: php apache .htaccess redirect


【解决方案1】:

.htaccess;-

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /htdocs/nexus.php [L]
</IfModule>

并且实际调用的文件名应该是$_SERVER['REQUEST_URI']

【讨论】:

  • 但是 $_SERVER['REQUEST_URI'] 不包括整个请求的 uri。
【解决方案2】:

由于您的静态资源位于不同的域中,您可以使用此mod_rewrite 规则将所有请求发送到您的 nexus.php 文件:

RewriteEngine on
RewriteRule !^nexus\.php$ nexus.php [L]

然后,原始请求的 URL 在 $_SERVER['REQUEST_URI'] 中可用(请注意,这还包含 URL 查询,而不仅仅是 URL 路径)。

但如果您想要允许访问其他文件,您可以使用附加到上一条规则的附加条件排除它们:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^nexus\.php$ nexus.php [L]

现在只有不能直接映射到现有文件(!-f)的请求被重写到nexus.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 2018-02-22
    • 1970-01-01
    • 2015-04-10
    • 2015-08-21
    • 2017-01-12
    • 2015-12-29
    • 2019-12-20
    相关资源
    最近更新 更多