繁体   English   中英

.htaccess RewriteCond小问题

[英].htaccess RewriteCond small issue

感谢@Ωmega,我几乎完全解决了我以前的问题(在.htaccess正则表达式问题上有详细信息),并得出了以下解决方案:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)(/|)$ [NC]
RewriteCond %1%3index.php -f
RewriteRule ^(.*/|)(en|de|fr)(/|)$ index.php?lang=$2 [NC,QSA,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)(/.*|)$ [NC]
#RewriteCond $1$3.php -f
RewriteRule ^(.*/|)(en|de|fr)(/.*|)$ $1$3.php?lang=$2 [NC,QSA,L]

基本上,这些行会将domain/language/sub/.../somepage形式的任何内容重写为domain/sub/.../somepage.php?lang=language 第一个块用于domain/language/形式的url,带或不带结尾/ URL,都将重定向到index.php

这非常有效,但仍然存在两个小故障:

  1. 无论如何,第二个块中的第三行(我#评论了它)都不匹配。 奇怪的是它确实在第四行上工作,即我的页面实际上显示正常。 这是否意味着-f参数在这里是错误的?

  2. 如果我输入任何以/结尾的网址(仅第二个块,它与索引文件一起工作),我的重写将被破坏,即输出为domain/language/sub/.../ somepage/.php是否有任何排除方法一个潜在的/在正则表达式在输入的网址?

感谢您的反馈意见 !

无论如何,第二个块中的第三行(我#评论了它)都不匹配。 奇怪的是它确实在第四行上工作,即我的页面实际上显示正常。 这是否意味着-f参数在这里是错误的?

您使用了错误的反向引用。 您需要%1和%3:

RewriteCond %1%3.php -f

如果我输入任何以/结尾的网址(仅第二个块,它与索引文件一起工作),我的重写将被破坏,即输出为domain / language / sub /.../ somepage / .php是否有任何排除方法用正则表达式输入的URL中是否有可能?

是的,您可以尝试将正则表达式从^(.*/|)(en|de|fr)(/.*|)$更改为^(.*/|)(en|de|fr)(/.*?)/?$RewriteCondRewriteRule

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM