【问题标题】:Why isn't this mod-rewrite to a different directory working?为什么这个mod-rewrite到不同的目录不起作用?
【发布时间】:2012-03-20 19:36:01
【问题描述】:

我在主页上有一个链接到

www.example.com/test

我在 pages 目录中有一个页面,名为 test.php

这是我的 .htaccess 的样子:

RewriteBase /
RewriteEngine on  
RewriteCond pages/%{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^(.*?)$ pages/$1.php

现在,我可以让它与RewriteRule ^test$ pages/test.php 一起工作,但只要我输入正则表达式,它就不起作用了。此外, RewriteCond 规则似乎也不起作用。你能想到什么解决方案?我尝试添加Options +FollowSymlinks -MultiViews,但没有成功。

更新

如果我将 test.php 添加到主目录,然后将 RewriteCond pages/%{REQUEST_FILENAME}.php -f [NC] 更改为 RewriteCond %{REQUEST_FILENAME}.php -f [NC] 然后它可以工作;所以这就是问题所在。

我不知道如何检查文件是否存在于pages 目录中。

【问题讨论】:

  • 发生了什么?您看到的是“内部服务器错误”还是“重定向循环”?
  • 是的,具体的错误很好。
  • 错误404。找不到页面。
  • @bkconrad 没用。它不会在 pages 目录中检查文件,这是它需要做的。

标签: php .htaccess mod-rewrite


【解决方案1】:

REQUEST_FILENAME 是完整的服务器 路径。因此,如果您的文档根路径是 /home/website/public/,您正在尝试检查 pages/home/website/public/test.php 是否存在,当然它不存在。

这是你想要的规则。

RewriteBase /
RewriteEngine on  
RewriteCond %{DOCUMENT_ROOT}/pages/%{REQUEST_URI}.php -f [NC]
RewriteRule ^(.*?)$ pages/$1.php

【讨论】:

  • 嗯。不工作。不影响 index.php,但 example.com/test 给了我一个 404。
  • 您在 pages 目录中有一个名为 test.php 的文件?如果您使用的是 Linux,则大小写很重要。这在我的测试中对我有用。
  • 是的。 test.php 在 pages 目录中。如果它们在同一个目录中,我可以让它正常工作,但我不知道如何检查文件是否存在于另一个目录中。
  • 我也只是独立想出了这个。如果这不起作用,您将省略配置详细信息。
  • 小心:如果您使用共享主机提供商,%{DOCUMENT_ROOT} 将不起作用。这种大规模定制的解决方案不会为每个用户设置DocumentRoot,因此请查看您的phpinfo() 中的变量,如 PHP_DOCUMENT_ROOT 在这种情况下,您将能够使用%{ENV:PHP_DOCUMENT_ROOT} 来代替,甚至只是对其进行硬编码——例如RewriteCond /home/userA/public_html/pages/$1.php -f(或者你的 DOCROOT 是什么。
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
相关资源
最近更新 更多