【问题标题】:How to make .htaccess RewriteRule without affecting index.php rules如何在不影响 index.php 规则的情况下制作 .htaccess RewriteRule
【发布时间】:2011-07-17 22:12:30
【问题描述】:

我在我的项目中使用 GET 请求,我想以一种简单的方式重写 URL:如果我访问 mydomain.com/test,它将在我的服务器端请求 mydomain.com/get.php?txt=test

这是我的 .htaccess RewriteRule,它工作正常,但问题是它也会影响我的 index.php,所以如果我转到主页,它会启动:mydomain.com/get.php?txt=test 请求并且因为我的 RewriteRule 而没有打开 mydomain.com/index.php

Options +FollowSymLinks
RewriteEngine On
RewriteRule (.*)$ get.php?url=$1 [L]

我不想在 mydomain.com/1/test 这样的路径中创建任何额外的子级别,它应该位于根目录的下一个级别。

任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    最常见的方式是添加条件只重写不存在的资源(文件和文件夹):

    Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) get.php?url=$1 [L]
    

    另一种可能的方法(适用于您的原始请求)是在请求/index.php 时忽略此类规则:

    Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{REQUEST_URI} !^/index\.php
    RewriteRule (.*) get.php?url=$1 [L]
    

    强烈推荐方法 #1,并且非常普遍。但是.. 也许您也通过get.php 提供所有资源(图像/样式/javascripts/等)(我不知道您的应用程序是做什么的以及它是如何工作的)因此我提供了另一种方法.

    【讨论】:

    • 感谢第一个效果很好!忽略任何现有资源的好主意!再次感谢您!
    【解决方案2】:

    添加

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

    重写规则之前。

    【讨论】:

    • 感谢您分享您的知识,您的 RewriteCond 应该可以正常工作,添加为 LAzyOne 编写的,并且可以正常工作!谢谢。
    【解决方案3】:

    这样可以吗?

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/index\.php$
    RewriteRule (.*)$ get.php?url=$1 [L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      相关资源
      最近更新 更多