【问题标题】:my mod-rewrite to change urls is not working我的 mod-rewrite 更改 url 不起作用
【发布时间】:2011-04-28 23:14:11
【问题描述】:

我想将 my.example.com/newsletter.php 或 example.com/newsletter.php 替换为 example.com/newsletter/

我试过这个:

RewriteEngine On
RewriteRule ^([a-z]+)$ /$1.php [L]

如果我想要http://example.com/communities/index.php?sub_id=1

是一个特定的名字,比如http://example.com/communities/Bridlewood/

可能吗?

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    关于前导斜杠的其他答案是正确的,您应该注意尾部斜杠的可能性(请记住,'$' 标志着字符串的结尾。

    试试这样的:

    RewriteBase / RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^([a-z-]+)/?$ /$1.php [QSA,NC,L]

    注意:QSA 标志代表“查询字符串附加”,并将任何 url 查询传递到相关页面。

    编辑:对于包含小写字母以外的字符的 URL,您应该更改范围组,使用不区分大小写的开关,或者按照其他人的示例简单地使用 (.*)

    【讨论】:

    • +1 表示斜杠。 @Adam 给出的示例使用它,但他的重写规则不包括它。
    • 具体的名字很快就会变得棘手!如果您希望所有页面都使用此方法,您最终必须为每个页面编写规则!您最好创建一个单独的页面来处理基于 ID 的重定向,接受 URL 参数作为字符串,然后将标头位置切换到正确的基于“id”的页面。这将只需要一个或两个 mod_rewrite 规则来将 URL 参数传递给 page_handler 文件。
    • 运行我服务器的人说他正在运行 WindowsIIS...我猜 mod-rewrite 不起作用?必须有一个等价物
    • 啊!!那么谷歌是你的朋友,你必须寻找答案年轻的padawan(对不起,已经很晚了,这是漫长的一天)。但你可以看看helicontech.com/download-isapi_rewrite3.htm——他们提供“免费软件”版本,但请考虑限制! --- 或者找出您的主机是否也提供基于 Apache 的服务器并请求转移您的站点。许多主机同时提供基于 Windows IIS 和 WAMP/LAMP 的服务器。如果您有一个友善的主机,他们应该很乐意效劳,如果他们非常好,它可能会在一周内完成,DNS 和所有的一切!
    【解决方案2】:

    您需要检查所请求的内容是否实际存在,否则您将遇到各种麻烦!试试这个:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$  /$1.php
    

    至于执行您要求的第二件事,您显然需要在您的 PHP 代码中有一个查找函数来获取您所追求的项目的 id。首先确保您实际上没有/communities 目录。

    文档中有很多帮助:http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

    【讨论】:

      【解决方案3】:

      请在此处查看我的答案:Rewrite all virtual subdomains to same folder using htaccess 与您在此处尝试执行的操作几乎相同。

      【讨论】:

        猜你喜欢
        • 2012-07-21
        • 1970-01-01
        • 2012-12-19
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多