【问题标题】:.htaccess - mod_rewrite is working for some pages but not for others.htaccess - mod_rewrite 适用于某些页面,但不适用于其他页面
【发布时间】:2011-12-12 04:40:30
【问题描述】:

我陷入了一个奇怪的问题。

我在 /public_html/academics/courses.php

位置有一个文件

我希望 .htaccess 修改 URL,如下所示:

原始网址:http://niecdelhi.ac.in/academics/courses/

mod_rewrite 之后:http://niecdelhi.ac.in/index.php?inc=/academics/courses/

基本上,我想要的是将所有 URL 修改为 index.php 并将 URL 作为名为“inc”的参数传递。然后,在 index.php 中,我通过执行 include($_GET['inc']);

来包含该文件

mod_rewrite 适用于网站上的某些页面。我得到了 $inc 中的 URL。但是,它根本不适用于其他页面。

例如,考虑服务器上存在的两个文件:

  1. http://niecdelhi.ac.in/academics/courses.php
  2. http://niecdelhi.ac.in/academics/library.php

mod_rewrite 为第一个工作,该文件被包含在 index.php 中 但是第二次我得到了普通的现有文件。不是 index.php 中包含的那个

我希望你能理解我所面临的问题。请提供解决方案。

.htaccess 文件

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !\..*$ [NC]
RewriteCond %{QUERY_STRING} (.*) [NC]
RewriteRule ^(.*)$ index.php?inc=$1&%1 [L]

页面工作:http://niecdelhi.ac.in/academics/courses/

页面不工作:http://niecdelhi.ac.in/academics/library/

*编辑*

在任何地方都没有其他 .htaccess。虽然,我找到了关于正在发生的事情的线索。该问题仅发生在 Linux 服务器中。代码在 Windows 服务器中正常运行。我有一个使用 PHP 5.2.16 的 Linux 服务器。

另外,关于某些页面可以正常工作,而某些页面不能正常工作。我发现只有那些在同一目录中具有相同名称的文件夹的页面才能正常工作。例如,学术目录如下:

academics/
    |_ courses/
    |    |_ mba.php
    |    |_ mca.php
    |_ courses.php
    |_ library.php

现在,由于 courses.php 在同一目录中有一个同名的文件夹。它得到 mod_rewrite 罚款。但是 library.php 没有得到 mod_rewrite。

Linux 服务器正在为实际存在的文件跳过 mod_rewrite。为什么会这样??

【问题讨论】:

  • 文件树中htaccess文件下面的另外两个文件吗?
  • 您确定您的链接指向正确的地址并添加了查询字符串吗?而不是相对路径?
  • @NVTOnline - 是的,这些文件位于文件树中相同的 .htaccess 之下..

标签: php .htaccess mod-rewrite


【解决方案1】:

我唯一的猜测是你的结构中的某个地方(最明显的是 /academics/ 内部)还有另一个 .htaccess 覆盖了“图书馆”的规则。

在那个文件夹中是否有另一个 mod_rewriting 规则正在为单词 LIBRARY 启动并且可能会搞乱你的重写。

请注意,这也可能是原生 apache 问题。例如,在 ubuntu 中,默认情况下在 10.10 版中(我认为就是这样)如果你有一个 /javascript/ 文件夹,它会短路到 /usr/lib/javascript 或类似的东西......

检查 httpd.conf 中所有可能的 mod rewrite 实例、所有动态加载的 .conf 文件、您的 vhost 文件以及最终文档根目录的路径...

【讨论】:

  • 没有其他 .htaccess 其他任何地方...我找到了一些有关该问题的线索...请阅读问题的编辑部分...谢谢...
  • 如果您只有想要受此规则影响的 php 文件,为什么不简单地执行以下操作: RewriteRule ^(.*.php) index.php?inc=$1 [L] 这通常会重写文件但是您的 $_GET 仍将填充之前请求的内容...试试看,告诉我它是否有效...
  • 感谢您的回复,您建议的代码很好,但我想重写以下所有 URL:– ` niecdelhi.ac.in/academics/library.php niecdelhi.ac.in/academics/library niecdelhi.ac.in/academics/library ` 到 index.php?inc =/学者/图书馆
  • 今天早上,当我在 Aruba.it 的 linux 服务器上上传了一个站点时,我确实解决了同样的问题。所有页面都来自模板,但在某些情况下它可以工作,而在另一些情况下则不行。我认为这是我的 .htaccess 文件,顺便说一句,当它在前一个提供商的服务器上时,它在同一个站点上运行良好。因此我认为它属于 Apache 的设置,但不知道是哪一个
猜你喜欢
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 2014-01-11
  • 2023-03-17
  • 2020-01-07
  • 2017-10-03
相关资源
最近更新 更多