.htaccess htaccess如果最后一个字符不是数字或斜杠,则重写/重定向
我有一个网站,我有一个htaccess规则集来获取整个url,并使用下面的规则将其转发到我的索引文件,一切正常.htaccess htaccess如果最后一个字符不是数字或斜杠,则重写/重定向,.htaccess,.htaccess,我有一个网站,我有一个htaccess规则集来获取整个url,并使用下面的规则将其转发到我的索引文件,一切正常 ################################# # Magic Re-Writes DO NOT CHANGE # ################################# <IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine on #RewriteBase /
#################################
# 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>
#################################
#神奇的重写不会改变#
#################################
选项+FollowSymlinks
重新启动发动机
#重写基/
#如果存在特定文件或文件夹,则不适用
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
#关于如何重写URL的规则
重写规则(.*)/index.php?url=$1[QSA,L]
所以下面的规则是向前的
到
然而,我还需要确保我迎合了那些忘记url中尾随斜杠的人,这通常是直截了当的,然而,我需要能够强制最后一个尾随斜杠,前提是最后一个字符不是数字(或者很明显是斜杠)
例如,某人打字
我需要浏览器中的url显示为:
但仍需转发至:
如前所述,如果最后一个字符已经有尾随斜杠,或者是数字,则例外
(希望有道理)
好的,这是我到目前为止得到的
#######################################
# 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#
#除非最后一个字符是数字#
#######################################
重新启动发动机
重写条件%{REQUEST_URI}[^0-9/]$
重写规则^(.*)$/$1/[R=301,L]
#################################
#神奇的重写不会改变#
#################################
选项+FollowSymlinks
重新启动发动机
重写基/
#如果存在特定文件或文件夹,则不适用
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
#关于如何重写URL的规则
重写规则(.*)/index.php?url=$1[QSA,L]
问题是,虽然它似乎在url中添加了斜杠,但它也添加了index.php,因此我最终得到的结果是:
访问:
将url重写为:
添加了斜杠,但我需要它这样做,而不显示索引部分
我经历了反复,有许多不同的结果(通常是彻底的失败或循环)
您的规则是正确的,但即使在不应该的情况下,它也会盲目地重定向。您上面的URL可能不是要重写的URL。你可以这样说:
http://mydomain.com/index.php?url=players/scoresheet/singlegame/
但我敢打赌,这真的有点像:
# note the slash here--------v
http://mydomain.com/index.php/?url=players/scoresheet/singlegame/
因为在URI被内部重写并路由到/index.php
之后,重写引擎再次循环,重定向捕获它,并将/index.php
重定向到/index.php/
。因此,您需要添加与路由规则中相同的排除条件:
因此,改变:
Rewritecond %{REQUEST_URI} [^0-9/]$
RewriteRule ^(.*)$ /$1/ [R=301,L]
致:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Rewritecond %{REQUEST_URI} [^0-9/]$
RewriteRule ^(.*)$ /$1/ [R=301,L]
或:
这就成功了,非常感谢你。我还以为我在那个儿会发疯呢。
RewriteCond %{REQUEST_URI} !index.php
Rewritecond %{REQUEST_URI} [^0-9/]$
RewriteRule ^(.*)$ /$1/ [R=301,L]