【问题标题】:htaccess: Ignore Case in RewriteRule?htaccess:在 RewriteRule 中忽略大小写?
【发布时间】:2014-10-06 00:00:43
【问题描述】:

我正在尝试重写这两个网址

domain.com/test
domain.com/TEST

到这里

domain.com/test.php

这是我当前的 .htaccess 代码:

Options +FollowSymlinks -Indexes
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(test|TEST)($|/$) /test.php

这适用于/test URL,但不适用于/TEST。我做错了什么?

【问题讨论】:

  • /TEST 是一个真实的目录吗?
  • 不,它不存在。
  • 这个 .htaccess 的位置是什么,还有更多规则吗?
  • 它在一个子目录中,上面就是它所包含的全部内容。父目录中还有其他 .htaccess - 所有这些都包含 CheckSpelling OFFAddType x-mapp-php5 .phpAddHandler x-mapp-php5 .php。感谢您帮助我解决问题 :)
  • 将选项行更改为Options +FollowSymlinks -Indexes -MultiViews

标签: apache .htaccess


【解决方案1】:

使用[NC] 标志会导致以不区分大小写的方式匹配 RewriteRule。也就是说,它不关心字母在匹配的 URI 中是大写还是小写。

你必须在rewriteurl中添加[NC]作为后缀

【讨论】:

  • 感谢您的回答 prashant - 我刚刚尝试过,但不幸的是它仍然无法正常工作。知道为什么吗?
【解决方案2】:

Prashant Thakre 关于 [NC] 标志的评论是正确的。下面的代码在忽略大小写的同时查找 /test 并设置永久重定向标志。

RewriteEngine On
RewriteCond %{REQUEST_URI} /test [NC]
RewriteRule .* http://example.com/test.php [R=301,L]

这是永久重定向的另一个选项,但它区分大小写,因此使用多行代码来匹配大小写。

RewriteEngine On
Redirect 301 /test http://example.com/test.php
Redirect 301 /TEST http://example.com/test.php

您可以在http://httpd.apache.org/docs/current/mod/mod_rewrite.html 找到有关 mod_rewrite 选项的更多信息

请记住在测试模组重写时始终清除浏览器缓存。当浏览器缓存页面时,即使重写工作正常,通常也会忽略重写。

【讨论】:

    【解决方案3】:

    是否可以对所有页面以及大小写字母都执行相同的操作?

    例如contact.html、services.html、prices.html。当您具有删除 .html 扩展名的重写规则时,并且当您编写时,例如 mydomain.com/contact.html 或 mydomain.com/contact 两种情况都显示 mydomain.com/contact 并加载 contact.html,但是,什么当您编写 mydomain.com/ConTaCt.html 或 mydomain.com/CONtaCT 以及所有页面的其他可能性时,您能否使其正常工作?服务、价格和所有其他内容,无论有无上限或更低

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多