我刚从另一个网站管理员工作开始了一个项目(我讨厌补丁其他的东西::伤心::)我有一些问题。首先,我们在表达引擎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]
寻求帮助!
答案 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 中。