【问题标题】:Use symlinks to remove .php extension -> raw .php file gets served使用符号链接删除 .php 扩展名 -> 提供原始 .php 文件
【发布时间】:2011-06-11 21:28:13
【问题描述】:

我创建了一个指向我的 index.php 的符号链接(使用 ln -s index.php 测试),以尝试获得一个没有 .php 扩展名的“更漂亮”的 url。 但是,当我访问 https://myservername.com/test 时,我得到的是原始 php 文件而不是解释的内容。

如果可能的话,我想避免打开 mod_rewrite,因为它只用于这个文件(我使用的是 CodeIgniter 框架,它为其余文件进行 url 转换)。

有没有办法让 apache 读取真正的目标文件而不是符号链接来确定它是一个 php 脚本?有没有更好的方法来实现这一点?

【问题讨论】:

  • 是的,完成它的更好方法是使用适当的工具(在本例中为mod_rewrite)...
  • 好的,将以下内容添加到 httpd.conf 中的 部分就可以了(我将 index.php 重命名为 ci.php):
    RewriteEngine on
    RewriteRule ^test $ /test/ [R]
    RewriteRule ^test/(.*)$ ci.php/$1 [L]
  • 好吧,用实际的回车替换上面的
    标签。
  • @ircmaxell:合适的工具是 Alias...瑞士刀可以做很多事情,但有时 KISS 规则适用。

标签: php linux apache symlink friendly-url


【解决方案1】:

我敢打赌,问题在于 Apache 只对带有 .php 扩展名的文件调用 PHP 解释器,并且由于您的符号链接没有任何扩展名,因此它们没有被解释。

尝试改用 mod_rewrite,或者尝试使用 Apache 指令,例如 FollowSymLinks - 但不确定它是否适用于此。您肯定不想为所有文件启用 PHP 解析器。

【讨论】:

  • 是的,我已经打开了 FollowSymLinks,但我同意为所有内容打开 PHP 解析器是个坏主意。我决定硬着头皮学习如何使用 mod_rewrite:我很高兴我这样做了,因为它看起来是一个非常有用的工具。
【解决方案2】:

如果你不想要mod_rewrite(我认为它是合法的,过去出现过mode_reqrite的安全问题,如果你不需要它为什么要使用它?):

Alias /index /var/ww/mydocumentroot/index.php

别名由您应该拥有的 mod_alias 提供。 删除你的符号链接

【讨论】:

  • 完美,谢谢:这就是我想要的。我想,因为我只需要一个文件,所以 mod_rewrite 是多余的(尽管我在其他项目中看到了很多用途)。
猜你喜欢
  • 2015-10-16
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 2015-05-13
相关资源
最近更新 更多