2009-06-30 170 views
5

我想使用没有尾部斜线的页面。所以现在我希望我的网址有一个结尾的斜线来重定向(使用.htaccess)到同一个网址,而不需要斜线。删除尾部斜线

我有两个.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:/webserver/**public/page/view/2

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

+0

我不确定如何解决您的问题,但我不确定这是否真的是您应该做的。 根据我的理解,请求这样的网址:http://www.example.com/myDir将用户实时重定向到http://www.example.com/myDir/。 这种额外的重定向可以用尾部斜线来避免。该斜线明确指出“myDir”是一个目录而不是文件。 – nikmd23 2009-06-30 14:22:51

+0

您是否在说尾部斜线是某种正式/标准/默认记号的一部分。 在这种情况下,我有类似的问题。我如何重定向以添加尾部斜杠;-) – Erik 2009-06-30 14:24:55

+0

由于您实际上并未尝试重定向到某个目录,所以尾部的斜杠根本无法帮助您 - 事实上,它不会以任何方式或任何方式执行任何操作其他。你应该跟随任何你感到满意并且在你的使用中保持一致 – Fake51 2009-07-04 11:17:15

回答

1

为什么ÿ你有几个.htaccess文件?在哪里重新定向到公共/ $ 1存储?你可能会面临压倒性的RewriteRule指令,这些指令会让你的事情变得复杂。

不知道你的设置很难说你应该如何使用重写 - 你能指定什么东西实际上看起来像?

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> 
+0

刚刚尝试过,但它不会重定向。 – Erik 2009-06-30 14:37:55

1

这里是一个由Apache文档的例子,你可以用它来解决你的问题:

尾随斜线问题

说明:

每一个网站管理员可以唱的问题一首歌引用目录的URL的尾部斜杠。如果它们丢失了,服务器会抛出一个错误,因为如果你说/〜quux/foo而不是/〜quux/foo /,那么服务器搜索一个名为foo的文件。并且因为这个文件是一个它抱怨的目录。实际上,它试图在大多数情况下解决它自己,但有时候这种机制需要你模拟。举例来说,你已经做了很多复杂的URL的重写后的CGI脚本等

解决方案:

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

所以,应该这样写:

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

疯狂的和懒惰甚至可以做以下的在他们的主目录的顶级.htaccess文件。但请注意,这会造成一些处理开销。

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

Source

2

WordPress会根据您的永久链接结构是什么重定向。因此,对.htaccess所做的任何更改都不会有什么帮助,因为Wordpress会为您添加/删除它们,并在.htaccess完成之后执行wp_redirect()。在最糟的情况下,你最终会得到一个重定向循环。

解决方案是关闭Wordpress重定向使用。

// perhaps an if(is_something()) before here ... 
add_filter('redirect_canonical', '__return_false'); 

你应该把这个包if语句或内部,在那里你进行一定页/目录/ etc检查。把上面的代码直接放在你的函数文件中会关闭wordpress的重定向并且可能会破坏你的东西。