删除尾部斜杠

时间:2009-06-30 14:07:27

标签: apache .htaccess mod-rewrite

我想处理没有尾随斜杠的页面。所以现在我希望我的URL带有一个斜杠,将(使用.htaccess)重定向到不带斜杠的同一个URL。

我有两个.htaccess文件:

<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteRule (.*)  public/$1
</IfModule>

我的公共文件夹中有一个:

DirectoryIndex index.html index.php
Options -Indexes

<IfModule mod_rewrite.c>
    RewriteEngine On        
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f         
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>

我尝试将以下规则添加到公用文件夹中的.htaccess文件中:

RewriteRule (.*)/$ $1 [R,L]

然后: example.com/public/page/view/2 /

重定向到: example.com / ** d:/网络服务器/ **公共/页/图/ 2

这显然不是我想要的......

4 个答案:

答案 0 :(得分:2)

为什么你有几个.htaccess文件?哪一个重定向到公共/ $ 1存储?您可能正面临着重写RewriteRule指令,这些指令会让您感到复杂。

如果不知道你的设置,很难说你应该如何使用重写 - 你能说明实际上看起来像什么吗?

答案 1 :(得分:2)

Wordpress重定向取决于您的永久链接结构。因此,对.htaccess的任何更改都会有所帮助,因为Wordpress会为你添加/删除它们,并在.htaccess完成之后执行wp_redirect()。在最坏的情况下,最终会出现重定向循环。

解决方案是使用。

关闭Wordpress重定向
// perhaps an if(is_something()) before here ...
add_filter('redirect_canonical', '__return_false');

你应该将它包装在if语句中,或者在你执行某个页面/目录/等的检查时。将上述内容直接放在您的函数文件中将关闭wordpress重定向并可能破坏事物。

答案 2 :(得分:1)

您是否尝试过添加:

RewriteBase /public

到公共文件夹中的.htaccess文件,获取:

<IfModule mod_rewrite.c>
    RewriteEngine On            
    RewriteBase /public

    RewriteRule (.*)/$ $1 [R,L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f         
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>

答案 3 :(得分:1)

以下是Apache文档中的一个示例,您可以使用它来解决您的问题:

尾随斜线问题

说明

每位网站管理员都可以唱一首关于引用目录的网址上的尾部斜杠问题的歌曲。如果它们丢失,服务器会转储错误,因为如果你说/ ~quux / foo而不是/ ~quux / foo /那么服务器会搜索一个名为foo的文件。因为这个文件是一个抱怨的目录。实际上它试图在大多数情况下修复它本身,但有时这个机制需要由你模仿。例如,在对CGI脚本等进行了大量复杂的URL重写之后。

解决方案:

这个微妙问题的解决方案是让服务器自动添加尾部斜杠。要正确执行此操作,我们必须使用外部重定向,以便浏览器正确请求后续图像等。如果我们只进行内部重写,这只适用于目录页面,但是当此页面中包含任何图像时会出错使用相对URL,因为浏览器会请求内联对象。例如,在没有外部重定向的情况下,对/~quux/foo/index.html中的image.gif请求将变为/~quux/image.gif!

所以,为了做到这一点,我们写道:

RewriteEngine  on
RewriteBase    /~quux/
RewriteRule    ^foo$  foo/  [R]

疯狂和懒惰甚至可以在他们的homedir的顶级.htaccess文件中执行以下操作。但请注意,这会产生一些处理开销。

RewriteEngine  on
RewriteBase    /~quux/
RewriteCond    %{REQUEST_FILENAME}  -d
RewriteRule    ^(.+[^/])$ $1/ [R]

Source