[英].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
。
这非常有效,但仍然存在两个小故障:
无论如何,第二个块中的第三行(我#评论了它)都不匹配。 奇怪的是它确实在第四行上工作,即我的页面实际上显示正常。 这是否意味着-f
参数在这里是错误的?
如果我输入任何以/
结尾的网址(仅第二个块,它与索引文件一起工作),我的重写将被破坏,即输出为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)(/.*?)/?$
在RewriteCond
和RewriteRule
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.