【问题标题】:Mod Rewrite ignore urlMod重写忽略url
【发布时间】:2013-10-27 02:17:30
【问题描述】:

我正在创建一个站点,而不是使用 GET 变量,我将只查看 url。您将如何创建一个 mod_rewrite 规则,无论是什么将用户引导到 index.php(或某个页面)?

EX:
用户输入: www.example.com/blog/programming/postName
用户仍然在地址栏中看到 www.example.com/blog/programming/postName 但显示 www.example.com/index.php

我试过了:

RewriteRule    ^([a-z]+.)?$    /index.php    [NC,L]  

但这只会更改一个目录的页面(仅适用于 www.example.com/worksNow/

RewriteRule    ^(.*)    /Blog3/index.php    [NC,L]

但出现服务器错误

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    此行为/配方不需要 mod_rewrite,请参阅 FallBackResource。

    http://httpd.apache.org/docs/2.2/mod/mod_dir.html#fallbackresource

    【讨论】:

    • 使用 mod_rewrite 和此方法的行为似乎完全相同。有什么理由使用你的方法更好吗?我还遇到了一个问题,即找不到我的文件(例如图像),因为服务器在显示图像或类似内容时认为它位于不同的目录中。除了为每张图片添加前缀之外,还有什么方法可以找到图片?
    • 添加它是为了替代处理 mod_rewrite 的通用/基本配置的特性。您的日志将准确地告诉您浏览器将您的相对链接解析到的资源。您要么需要修复生成链接的内容,要么将它们重写为磁盘上存在的内容。这是隐藏/添加上下文根的正常结果。
    【解决方案2】:

    你可以使用这条规则:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php [L]
    

    这意味着如果任何不是针对文件或目录的请求,则在内部将其重写为 /index.php

    参考:Apache mod_rewrite Introduction

    【讨论】:

    • 确实有效。但是我不知道它是如何工作的。我理解这条线RewriteRule ^(.*)$ /index.php [L],但我不知道它上面的两行是做什么的。你想解释一下吗?我还遇到了一个问题,即找不到我的文件(例如图像),因为服务器在显示图像或类似内容时认为它位于不同的目录中。除了为每张图片添加前缀之外,还有什么方法可以找到图片?
    • RewriteCond %{REQUEST_FILENAME} !-f 表示请求是否针对有效文件,RewriteCond %{REQUEST_FILENAME} !-d 表示请求是否针对有效目录。请检查我在回答中提供的 mod_rewrite 文档链接。
    猜你喜欢
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多