【问题标题】:.htaccess rewrite every request to index.php.htaccess 重写每个对 index.php 的请求
【发布时间】:2017-10-15 03:20:42
【问题描述】:

我是第一次使用.htaccess,但遇到了循环问题。我正在努力实现以下目标:

  1. http://something.com 重写为 http://something.com/main

  2. http://something.com/anything 重写为 http://something.com/index.php?page=anything

到目前为止,我目前的尝试看起来是这样的,效果令人满意:

RewriteEngine on
RewriteBase /

RewriteRule ^/?$ /main [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ /index.php?page=$1 [NC,L]

但是,我想删除这两个重写条件以允许对http://something.com/index.php 的请求变为http://something.com/index.php?page=index.php。删除两个RewriteCond 行会导致循环,并且重写不起作用。

我做错了什么,我该如何解决这个问题?谢谢!

【问题讨论】:

    标签: php apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您可以删除这些条件,但您需要颠倒您的规则并从目标 URI 中删除前导 /

    RewriteEngine on
    RewriteBase /
    
    RewriteRule ^(.+)$ index.php?page=$1 [QSA,L]
    
    RewriteRule ^/?$ main [L]
    

    还请记住,现在您的第一条规则还将 css/js/image 请求重写为 index.php?page=...。如果您想避免这种情况,请在第一个 RewriteRule 之前添加此条件:

    RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|bmp|png|ico|tiff|css|js)$ [NC]
    

    【讨论】:

    • 谢谢!这完全符合我的要求。重写适用于 Web 应用程序,它从外部 CDN 动态加载内容。在这种情况下,预期的行为是让一切都通过index.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2012-02-18
    • 2016-11-30
    相关资源
    最近更新 更多