【问题标题】:Why does www.mywebsite.com/folder work, but www.mywebsite.com/folder/ does not?为什么 www.mywebsite.com/folder 有效,而 www.mywebsite.com/folder/ 无效?
【发布时间】:2011-11-19 16:50:56
【问题描述】:

为什么 mywebsite.com/page 有效,而 mywebsite.com/page/ 无效?我们有一个 htaccess 条目,它删除了文件的 .php 结尾,例如“mywebsite.com/new.php”可以简单地作为“mywebsite.com/new”访问。但是,如果添加了正斜杠(某些搜索引擎或浏览器出于某种原因添加了斜杠似乎会发生这种情况),则会显示我们的 404 错误页面。有任何想法吗?非常感谢!

以下是 .htaccess 文件中的所有重写规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z0-9\-_]+)/?$ $1.php [NC,L]

rewriteCond %{HTTP_HOST} ^mywebsite.cz [NC]
rewriteRule ^(.*)$ http://www.mywebsite.cz/$1 [R=301,L]

rewriteCond %{HTTP_HOST} ^mywebsite.com [NC]
rewriteRule ^(.*)$ http://www.mywebsite.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^mywebsite.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.mywebsite.com$
RewriteRule ^cs$ "http\:\/\/www\.mywebsite\.com\/index_cz\.php" [R=301,L]

RewriteCond %{HTTP_HOST} ([^.]+)\.mywebsite.com [NC]
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ http://www.mywebsite.cz [L,R=301]

RewriteCond %{HTTP_HOST} ([^.]+)\.mywebsite.cz [NC]
RewriteCond %{HTTP:Accept-Language} (cs) [NC]
RewriteRule ^$ /index_cz [L,R=301]

RewriteCond %{HTTP_HOST} ^www.mywebsite\.com
RewriteRule ^([0-9]+)/?$ project.php?id=$1 [NC,L] # Handle project requests

RewriteCond %{HTTP_HOST} ^www.mywebsite\.cz
RewriteRule ^([0-9]+)/?$ project_cz.php?id=$1 [NC,L] # Handle project requests

【问题讨论】:

  • 关于.php删除的部分是:RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php

标签: .htaccess redirect


【解决方案1】:

你可以试试这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z0-9\-_]+)/?$ $1.php [NC,L]

另外,您必须将所有 , , 更改为指向文件夹的根目录。例如:

<link rel="Shortcut Icon" type="image/ico" href="favicon.ico"/>
<script type="text/javascript" src="js/charactercounter.js"></script>

会变成:

<link rel="Shortcut Icon" type="image/ico" href="/favicon.ico"/>
<script type="text/javascript" src="/js/charactercounter.js"></script>

【讨论】:

  • 奇怪,我在我的网站上使用这个规则,你在 .htaccess 中还有其他重写规则吗?
  • 我刚刚编辑了我的原始帖子以显示 .htaccess 文件中的所有重写规则...
  • 你能给我举一个你看到的例子吗?
【解决方案2】:

当您编写 mysite.com/page 时,这会将您定向到根目录中的文档。但是,当你写我的site.com/page/ 时,Apache 会认为你是在引用一个名为page 的目录,然后在page 目录中寻找一个文件。

【讨论】:

  • 好的,有什么想法可以让 / 版本直接指向未加斜线的页面吗?
【解决方案3】:

也许是这样的......

      RewriteCond %{HTTP_HOST} !^\.yoursite\.com$ [NC]
      RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

【讨论】:

    猜你喜欢
    • 2016-07-01
    • 2016-01-25
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2019-05-05
    • 2020-03-09
    相关资源
    最近更新 更多