HTaccess - 尾部斜杠+ .php +锚点(ExpressionEngine)

时间:2011-07-14 15:10:53

标签: .htaccess expressionengine

我刚从另一个网站管理员工作开始了一个项目(我讨厌补丁其他的东西::伤心::)我有一些问题。首先,我们在表达引擎1.x上。

我的问题:.HTACCESS中有一个尾部斜杠重定向,但我的用户只需要访问一个.php页面( www.mydomain.com/mobile/index.php )但链接被重定向到 /index.php / ,另一个问题是锚点被更改为相同的方式( www.mydomain.com/somepage/#anchor1 )的 /#anchor1 /

所以我的问题是......有一种方法可以将异常放入斜杠重定向代码中吗?我的意思是我只需要在几页中修复它。请注意,我们的表达式引擎会删除所有index.php,以获得www.mydomaine / contact /,www.mydomaine / about /,www.mydomaine / infos /等链接。

目前,htaccess跟踪代码为:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule ^(.*)$ $1/ [L,R=301]

P-S:我们有一个删除index.php的代码:

RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5})$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/(members|P[0-9]{2,8}) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]

寻求帮助!

1 个答案:

答案 0 :(得分:1)

是否有正当理由需要强制执行URL 中的斜杠? 如果没有,我会删除重写规则并解决您的问题:)

大多数ExpressionEngine网址都可以使用而不使用尾部斜杠。

解决此问题的最简单方法是删除过度热线的斜杠重定向,并将其替换为更宽松的版本:

<IfModule mod_rewrite.c>
    # Enable Apache's RewriteEngine
    RewriteEngine On

    # Add Trailing Slashes to URLs
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+[^/])$ /$1/ [R=301,L]

    # ExpressionEngine Remove index.php from URLs
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule> 

使用上面的代码,example.com/mobile/index.php 不会被重写example.com/mobile/index.php/,也不会被包含example.com/page/#anchor1的网页。

EE不知道/mobile/mobile/之类的URI之间的区别,网络分析应用和搜索引擎可能会考虑这些单独的网页。如果你正在开发一个静态网站,这不是什么大问题,因为如果你试图转到前一个URI(没有斜杠),Apache会自动将客户端重定向到后者(带斜杠)。

但是对于像EE这样的Web应用程序,index.php之后的URI中的所有内容都由应用程序而不是 Apache 处理,这个重定向会被遗漏给你。就像决定使用或不使用www子域一样,无论您是选择强制尾随斜杠还是反之亦然;重要的是你强制执行其中一个。

  

旁注:在EE1中,在生成的URL中生成尾部斜杠   ExpressionEngine;在EE2中,不会生成尾部斜杠。例外   是Structure Module,它输出带有斜杠的URL   在EE1和EE2 中。