我在设置重定向时遇到问题。我在某些目录中有索引页,目录名是简单的六个字符长令牌,如ABCDEF。名称是字母数字和全部大写字母。我最初想要的是将包含令牌的所有流量,小写和大写指向正确的目录。 我没有访问服务器模块,比如mod_speling,因此我使用php脚本来进行实际的url重写。有用。 但后来又想再增加一步,以指导所有流量:
example.com/ABCDEF
example.com/abcdef
example.com/reference/abcDEF
example.com/referENces/ABCdeF
到目录:
example.com/references/ABCDEF/
我无法完成这些工作,我的重定向始终处于循环状态。
我的htaccess中有什么:
# takes care of: example.com/abcdef
RewriteCond %{DOCUMENT_ROOT}/references/%{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} ^(/?)([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(/?)([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
# takes care of example.com/reference/abcDEF
RewriteCond %{REQUEST_URI} ^(/?)([REFNCS?refncs?]{9})/([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(/?)([REFNCS?refncs?]{9})/([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
# this should take care of: example.com/references/abcDEF , but if I uncomment it, we end up in a loop
#RewriteCond %{REQUEST_URI} ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$
#RewriteRule ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
# Finally this handles: example.com/ABCDEF
RewriteCond %{DOCUMENT_ROOT}/references/%{REQUEST_URI} -d
RewriteCond %{REQUEST_URI} ^(/?)([a-zA-Z0-9]{6})(/?)$
RewriteRule ^(/?)([a-zA-Z0-9]{6})(/?)$ example.com/references%{REQUEST_URI} [QSA,L,NC,R=302]
此时我确信必须有一个更好,更通用的正则表达式解决方案。第二和第三块可能以某种方式合并。
彼得
答案 0 :(得分:0)
尝试更改:
RewriteCond %{REQUEST_URI} ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$
RewriteRule ([REFNCSrefncs]{10})/([a-zA-Z0-9]{6})(/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
要:
RewriteCond %{REQUEST_URI} ^(\/?)([REFNCSrefncs]{10})\/([a-zA-Z0-9]{6})(\/?)$
RewriteRule ^(\/?)([REFNCSrefncs]{10})\/([a-zA-Z0-9]{6})(\/?)$ example.com/rewrite.php?rewrite=example.com%{REQUEST_URI} [QSA,L,NC,R=302]
答案 1 :(得分:0)
看起来很有效:
ROW_NUMBER()
我必须改变([REFNCSrefncs] {10})和([REFNCrefnc] {9})的顺序。
感谢您的提示!