使用GET变量将文件夹中的所有链接重定向到index.php(使用htaccess)?

时间:2019-05-16 18:21:06

标签: php html html5 .htaccess

我不知道是否可能,但我认为是可能。我从来没有使用过htaccess,所以我什至都不知道如何搜索它。 我想将文件夹内的所有链接重定向到index.php,并将文件名作为GET变量传递。

例如: localhost/folder/file-123重定向到localhost/index.php?file=file-123

我在StackOverflow中没有发现任何类似的东西,但是如果已经回答了,请链接它。

谢谢=)

2 个答案:

答案 0 :(得分:2)

apache http服务器的重写模块随附的文档具有优秀的质量,并附带了许多示例。您还可以在那里找到问题的答案。

您可能希望根据自己的特定需求进行调整,但是以下几点应为您指明正确的方向:

RewriteEngine on
RewriteRule ^/?folder/(.*)$ /index.php?file=$1 [END,QSA]

如果使用上述规则收到内部服务器错误(http状态500),则很可能是您运行了非常旧版本的apache http服务器。在这种情况下,您将在http服务器错误日志文件中看到对不支持的[END]标志的明确提示。您可以尝试升级或使用旧的[L]标志,在这种情况下它可能会起作用,尽管这在一定程度上取决于您的设置。

此规则将同样在HTTP服务器主机配置或动态配置文件内(“htaccess的”文件)工作。显然,重写模块需要加载到http服务器内部并在http主机中启用。如果使用动态配置文件,则需要注意在主机配置中完全启用了它的解释,并且该解释位于主机的DOCUMENT_ROOT文件夹中。

还有一个一般性说明:您应该始终喜欢将此类规则放置在http服务器主机配置中,而不要使用动态配置文件(“ .htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为,难以调试的原因,并且确实降低了http服务器的速度。仅当您无法访问真正的http服务器主机配置(阅读:真正便宜的服务提供商)或坚持编写自己的规则的应用程序(这显然是安全的噩梦)时,才提供它们作为最后的选择。

答案 1 :(得分:0)

.htaccess文件的工作方式与<Location>伪指令大致相同,但是它们实际上适用于存储它们的目录。此外,可以修改它们而无需重新启动服务器,对于无法访问全局配置文件(例如托管服务)的网站所有者来说,确实有用。

如果您希望重定向对客户端完全透明,请参阅arkascha's answer.

但是,如果您希望实现真正的HTTP重定向(自动,但正在更新客户端的地址栏),则可以坚持使用RedirectRedirectMatch指令,这比这要容易,并且比RewriteRule尽管后一种情况并不那么复杂。