【问题标题】:Browser seems to show query given by .htaccess浏览器似乎显示 .htaccess 给出的查询
【发布时间】:2017-06-14 03:30:18
【问题描述】:

我用来将所有内容重定向到 index.php 的方法似乎存在问题,该方法位于我的根文件夹 public_html 中。应该没有例外 当然这是当然的,除非文件夹关闭了 RewriteEngine。为简单起见,假设我使用 www.example.com 作为我的网站。

我的 .htaccess 如下所示:

RewriteEngine on
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
  • 例如,假设我在浏览器中输入:www.example.com/test
  • 它在内部按预期重定向到:www.example.com/index.php?url=test

问题:

  • 我希望浏览器仍然显示:www.example.com/test
  • 但是,浏览器现在显示:www.example.com/test/?url=test

这个凌乱的名字只有在我的根目录中有一个名为 test 的文件夹时才会出现。如果我删除该文件夹,它会显示:

  • www.example.com/test

但是,如果我再次添加该文件夹,它会显示:

  • www.example.com/test/?url=test

它仍然可以正确重定向,但看起来不再干净。 我很好奇的是究竟是什么导致了它的行为方式以及如何解决/预防它。

请注意,我总是想重写 url。所以我不想为文件夹做例外。无论是否有文件夹,它的外观和工作方式都应该相同。


编辑 1:根文件夹是 public_html,所以 example.com(作为示例)


编辑 2:更改了问题的措辞,问题仍然相同。


编辑 3:更改了问题的格式。


编辑4:补充说我要重写url,不管文件夹是否存在。

【问题讨论】:

  • 目前我用作添加斜杠的解决方案。所以 www.example.com/test 将首先被转换为 www.example.com/test/。使用斜杠时,它不显示 /?url=test 。然而,我仍然不知道为什么它首先显示 url 参数。

标签: apache .htaccess url redirect mod-rewrite


【解决方案1】:

这可能需要进一步编辑才能完全按照您的要求进行,但使用 RewriteCond 您可以指定何时实际重写 url 的条件。

RewriteEngine On
RewriteBase /
 ##perform rewrite only if requested file does not exist...
RewriteCond %{REQUEST_FILENAME} !-f
 ##perform rewrite only if requested directory does not exist...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)$ /test/?url=$1 [L]

【讨论】:

    【解决方案2】:

    你需要在你的.htaccess中使用这个:

    RewriteEngine On
    RewriteRule ^([^/]*)$ /test/?url=$1 [L]
    

    此代码将为您提供所需的 URL。确保在测试之前清除缓存。

    【讨论】:

    • 感谢您的回答,不幸的是它似乎不起作用。我更改了问题的措辞和格式,使其更加具体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多