【问题标题】:how to make apache hosted website url requests case insensitive如何使 apache 托管的网站 url 请求不区分大小写
【发布时间】:2015-02-24 04:49:02
【问题描述】:

我的 page1.php 文件位于

/public_html/mypages/page1.php

如果用户请求www.myurl.com/Mypages/Page1.php 返回file not found

我怎样才能确保每个请求都得到处理而不考虑情况

我正在使用godaddy linux服务器

来自他们的支持页面

https://support.godaddy.com/help/article/899/how-do-i-use-mod_rewrite

.htaccess知道可以做到

所以我在/public_html/mypages/ 中添加了.htaccess

http://www.chrisabernethy.com/force-lower-case-urls-with-mod_rewrite/

这是我的 .htaccess 文件的内容

RewriteEngine On
RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

之后,当我尝试访问任何文件 www.myurl.com/Mypages/Page1.php 时,它会出现内部服务器错误。请帮我解决这个问题。

我也试过添加

<IfModule mod_speling.c>
CheckSpelling On
CheckCaseOnly On
</IfModule>

现在我没有收到内部服务器错误,但我收到了

“文件未找到错误”

www.myurl.com/mypages/page1.php -->工作正常。 但 www.myurl.com/mypages/Page1.php --> “找不到文件错误”

【问题讨论】:

    标签: php apache .htaccess mod-rewrite


    【解决方案1】:

    如果您可以加载 mod_speling 模块。使用这个:

    RewriteEngine On
    AllowOverride All
    CheckSpelling on
    

    否则;如果您不能(您无法控制它)使用 mod_rewrite 强制使用小写 URL(就像您在问题上写的那样)

    RewriteEngine On
    RewriteMap  lc int:tolower
    RewriteCond %{REQUEST_URI} [A-Z]
    RewriteRule (.*) ${lc:$1} [R=301,L]
    

    由于您的 .htaccess 位于文件夹中,并且现在位于文档根目录 (public_html) 中,因此请尝试添加您的重写。也许这只是一个问题,因为它不在文档根目录中。

    【讨论】:

    • 我尝试在 . 上添加 CheckSpelling,但仍然遇到相同的内部服务器错误
    • 首先,请把.htaccess 移到public_html 并检查页面。如果您遇到相同的错误,请从 .htaccess 中删除内容并再次检查该页面。如果错误仍然...您的页面上有错误
    • 我将 .htaccess 移至 public_html 并且可以看到相同的内部服务器错误。然后我删除了 .htaccess 并且只有在大小写不匹配时才会出现错误。 www.myurl.com/mypages/page1.php --> 工作正常。但是 www.myurl.com/mypages/Page1.php --> >'找不到文件错误'
    • 请不要提供“仅代码”的答案。请添加解释和依赖项。
    • 我知道发生了什么。根据这篇文章 Godaddy 不加载 mod_spelling 模块。 ionipti.blogspot.com/2009/11/… 因此,您必须使用 mod_rewrite 强制使用小写 URL。我会更新我的答案
    【解决方案2】:

    为了解决这个问题,我将所有文件名更改为小写,并将以下内容添加到 .htaccess 中。 (建议here

    RewriteCond %{REQUEST_URI} !([A-Z]+)
    RewriteRule .* - [S=27]
    RewriteRule ^(.*)A(.*)$ http://%{HTTP_HOST}/$1a$2 [R=301,L]
    RewriteRule ^(.*)B(.*)$ http://%{HTTP_HOST}/$1b$2 [R=301,L]
    RewriteRule ^(.*)C(.*)$ http://%{HTTP_HOST}/$1c$2 [R=301,L]
    RewriteRule ^(.*)D(.*)$ http://%{HTTP_HOST}/$1d$2 [R=301,L]
    RewriteRule ^(.*)E(.*)$ http://%{HTTP_HOST}/$1e$2 [R=301,L]
    RewriteRule ^(.*)F(.*)$ http://%{HTTP_HOST}/$1f$2 [R=301,L]
    RewriteRule ^(.*)G(.*)$ http://%{HTTP_HOST}/$1g$2 [R=301,L]
    RewriteRule ^(.*)H(.*)$ http://%{HTTP_HOST}/$1h$2 [R=301,L]
    RewriteRule ^(.*)I(.*)$ http://%{HTTP_HOST}/$1i$2 [R=301,L]
    RewriteRule ^(.*)J(.*)$ http://%{HTTP_HOST}/$1j$2 [R=301,L]
    RewriteRule ^(.*)K(.*)$ http://%{HTTP_HOST}/$1k$2 [R=301,L]
    RewriteRule ^(.*)L(.*)$ http://%{HTTP_HOST}/$1l$2 [R=301,L]
    RewriteRule ^(.*)M(.*)$ http://%{HTTP_HOST}/$1m$2 [R=301,L]
    RewriteRule ^(.*)N(.*)$ http://%{HTTP_HOST}/$1n$2 [R=301,L]
    RewriteRule ^(.*)O(.*)$ http://%{HTTP_HOST}/$1o$2 [R=301,L]
    RewriteRule ^(.*)P(.*)$ http://%{HTTP_HOST}/$1p$2 [R=301,L]
    RewriteRule ^(.*)Q(.*)$ http://%{HTTP_HOST}/$1q$2 [R=301,L]
    RewriteRule ^(.*)R(.*)$ http://%{HTTP_HOST}/$1r$2 [R=301,L]
    RewriteRule ^(.*)S(.*)$ http://%{HTTP_HOST}/$1s$2 [R=301,L]
    RewriteRule ^(.*)T(.*)$ http://%{HTTP_HOST}/$1t$2 [R=301,L]
    RewriteRule ^(.*)U(.*)$ http://%{HTTP_HOST}/$1u$2 [R=301,L]
    RewriteRule ^(.*)V(.*)$ http://%{HTTP_HOST}/$1v$2 [R=301,L]
    RewriteRule ^(.*)W(.*)$ http://%{HTTP_HOST}/$1w$2 [R=301,L]
    RewriteRule ^(.*)X(.*)$ http://%{HTTP_HOST}/$1x$2 [R=301,L]
    RewriteRule ^(.*)Y(.*)$ http://%{HTTP_HOST}/$1y$2 [R=301,L]
    RewriteRule ^(.*)Z(.*)$ http://%{HTTP_HOST}/$1z$2 [R=301,L]
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
    

    现在我没有看到任何错误,并且无论情况如何,它都会接受请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-14
      • 2012-05-25
      • 2011-01-28
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      相关资源
      最近更新 更多