我有一个网站,我设置了一个 htaccess 规则来获取整个 url,并使用以下规则将其转发到我的索引文件,一切正常。
#################################
# Magic Re-Writes DO NOT CHANGE #
#################################
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
#RewriteBase /
# Do Not apply if a specific file or folder exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# The rules on how to rewrite the urls
RewriteRule (.*) /index.php?url=$1 [QSA,L]
</IfModule>
所以下面的规则转发http://mydomain.com/players/scoresheet/singlegame
至
http://mydomain.com/index.php?url=players/scoresheet/singlegame
但是,我还需要确保我能满足人们忘记 url 中的尾部斜杠的需求,这通常是直截了当的,但是,只有当最后一个字符不是数字(或显然是斜杠)时,我才需要能够强制使用最后的斜杠)。
例如,有人打字;
http://mydomain.com/players/scoresheet/singlegame
我需要浏览器中的 url 显示为: http: //mydomain.com/players/scoresheet/singlegame/
但仍被转发到:http ://mydomain.com/index.php?url=players/scoresheet/singlegame/
如前所述,如果最后一个字符已经有斜杠,或者是数字,则例外情况。
(希望这是有道理的)
好的,这就是我到目前为止所拥有的......
#######################################
# Add trailing slash to url #
# unless last character is a number #
#######################################
<IfModule mod_rewrite.c>
RewriteEngine on
Rewritecond %{REQUEST_URI} [^0-9/]$
RewriteRule ^(.*)$ /$1/ [R=301,L]
</IfModule>
#################################
# Magic Re-Writes DO NOT CHANGE #
#################################
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
# Do Not apply if a specific file or folder exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# The rules on how to rewrite the urls
RewriteRule (.*) /index.php?url=$1 [QSA,L]
</IfModule>
这样做的问题是,虽然它似乎在 url 中添加了斜杠,但它也添加了 index.php,所以我最终得到的是:
访问: http: //mydomain.com/players/scoresheet/singlegame
将 url 重写为:http ://mydomain.com/index.php?url=players/scoresheet/singlegame/
添加了斜线,但我需要它这样做而不显示索引部分。
我来回走动,有许多不同的结果(通常是彻底的失败或循环)。
任何帮助,将不胜感激