【问题标题】:get the index.php with .htaccess使用 .htaccess 获取 index.php
【发布时间】:2011-04-24 12:36:02
【问题描述】:

我在我的 .htaccess 中使用了一堆 ReWrite 规则,例如这些

RewriteRule ^brochure/([^/]+)/?$ brochure.php?cat_path=$1

感谢我通过搜索此站点找到的答案,这一切都很好。但我有一个小小的障碍。

目前这条规则非常有效 RewriteRule ^([a-zA-Z0-9_-]+)?$ $1.php 它捕获了我所有的网址,例如 www.mysite.com/shane 并请求 shane.php - 到目前为止一切顺利,但是当我调用 www.mysite.com 时,我需要它来请求 index.php

我可以使用哪个规则?

谢谢大家。

更新 - 为了将来需要类似帮助的用户。

我的^([a-zA-Z0-9_-]+)?$ $1.php 规则导致了我上面提到的问题。此类规则中不需要问号?,当您删除问号时,目录中的 index.php 文件将恢复为默认登录页面。感谢 Tomalak 的帮助。

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    您不需要任何规则。只要确保.php目录的默认索引文件,它就会自动发生。

    更新

    我认为你的规则

    ^([a-zA-Z0-9_-]+)?$ $1.php
    

    实际上应该是

    ^([a-zA-Z0-9_-]+)$ $1.php
    

    这样它就不会与未提供文件名的请求发生冲突(您希望将其定向到index.php)。

    【讨论】:

    • 通常在我的服务器上,mysite.com 会请求 index.php 或 index.html,但是当我使用上述规则时,它不再需要。这意味着您的建议不起作用并给了我一个 404
    • @shane:使用RewriteLog 并查看日志文件。
    • 等等,你的规则不应该是^([a-zA-Z0-9_-]+)$ $1.php吗?您对? 的使用似乎是错误的。
    【解决方案2】:

    我认为这就是您正在寻找的,不确定的想法:

    RewriteRule ^/$ index.php
    

    【讨论】:

    • 无论出于何种原因,当我使用我在 OP 中声明的规则时,该规则不再有效。通常也不会自动引用 index.php 或 index.html。不知道为什么。
    【解决方案3】:

    您可以按照 Tomalak 的说明进行操作,并确保将 DirectoryIndex 设置为加载 index.php

    或者接近詹姆斯所说的,

    RewriteRule ^/?$ index.php [L]
    

    【讨论】:

    • 无论出于何种原因,当我使用我在 OP 中声明的规则时,该规则不再有效。通常自动引用 index.php 或 index.html。
    • @shane:这将是因为排序,这需要首先使用您拥有的规则,同时删除结尾?,它使其余部分成为可选,这允许它匹配空大小写,这就是上面所做的。
    • 这行得通,但 Tomalak 发现了 ? 的误用。他的回答让我节省了一行代码。谢谢。
    • @shane:是的,这就是我提到它的原因。建议你正确学习正则表达式,这是一个非常好用的技能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2011-07-31
    相关资源
    最近更新 更多