【问题标题】:Extensionless URL trailing slash redirect无扩展 URL 尾部斜杠重定向
【发布时间】:2011-09-13 14:18:29
【问题描述】:

我在几个 Dreamhost 域上测试了下面的代码,它可以工作,除了大约在 2012 年添加的新域

RewriteEngine on

#unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]

#redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.*)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.*)\.php$ $1 [R=301,L]

#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

有效的例子

ryanve.com/resources/lame/ryanve.com/resources/lame.php 都重定向到 ryanve.com/resources/lame 并且实际提供的文件是 lame.php

破例

airve.com/test/file 正确地为 file.php 提供服务,但重定向 airve.com/test/file/airve.com/test/file.php 不起作用。尝试它们,您会发现它们似乎在吐出内部绝对路径。当我独立尝试每个重定向以及尝试下面的基本重定向时,发生了同样的事情。

Redirect 301 /test/file/ /test/file

.htaccess 中没有其他内容。知道问题是什么吗?

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    在这两种情况下,您都重定向到 $1,并且您没有 RewriteBase 指令来告诉 Apache 在哪里根植这样的相对路径。

    尝试在 $1 之前添加一个根斜线以将其锚定到您的网络服务器的根目录,例如:

    RewriteRule ^(.*)$ /$1.php [L]
    

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2018-07-17
      • 1970-01-01
      相关资源
      最近更新 更多