将任何GET请求重定向到单个php脚本

时间:2015-04-30 09:29:37

标签: php .htaccess

经过几个小时搞乱.htaccess后,我已经到达了将任何请求发送到单个PHP脚本的结论:

  • 生成html(无论如何,包括或动态)
  • 301重定向,在逻辑上具有更大的灵活性(对于哑巴.htaccess-eer)
  • 如果请求没有意义,
  • 最终会出现404错误。

在.htaccess中留下最小的功能。

经过一些测试似乎很可行,从我的观点来看更为可取。这么多,我想知道这种方法有什么不对或可能出错?

  • 服务器性能?
  • 在搜索引擎优化方面,我没有看到任何问题,因为程序将是透明的"到机器人。

redirector.php会期望一个包含实际请求的查询字符串。 将所有内容发送到那里的.htaccess代码是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用此代码将所有请求重定向到一个文件:

RewriteEngine on
RewriteRule ^.*?(\?.*)?$ myfile.php$1

请注意,所有请求(包括样式表,图片......)也将被重定向。当然还有其他可能性(规则),但这是我正在使用的那个,它将保持查询字符串的正确性。如果您不需要,可以使用

RewriteEngine on
RewriteRule ^.*?$ myfile.php

这是一种常见的技术,因为机器人甚至用户只能看到他们请求的URL,而不是内部处理的方式。服务器性能根本不是问题。

因为您将所有 URL重定向到一个php文件,所以不再有404页面,因为它会被.php文件缓存。因此,请确保正确处理无效网址。

答案 1 :(得分:1)

我更喜欢将所有的php文件移到另一个目录中,并在你的htdocs路径中只放置一个php文件,它处理所有请求。其他文件,你想通过没有PHP,你也可以使用这个htaccess放在该文件夹中:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$0 [L]

现有文件(JPG,JS或者其他)在没有PHP的情况下仍然可以访问。这是实现它的最灵活方式。

示例:

- /scripts/ # Your PHP Files
- /htdocs/index.php # HTTP reachable Path
- /htdocs/images/test.jpg # reachable without PHP
- /private_files/images/test.jpg # only reachable over a PHP script