2

感谢@Ω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/.../somepageto的形式重写任何内容domain/sub/.../somepage.php?lang=language。第一个块用于 url 形式的 url domain/language/,带或不带结尾/,重定向到index.php.

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

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

  2. 如果我输入任何以 a 结尾的 url /(仅第二个块,它确实与索引文件一起使用),我的重写被破坏,即输出为有没有办法用正则表达式排除输入的 url 中的潜力?domain/language/sub/.../somepage/.php/

感谢您的反馈意见 !

4

1 回答 1

0

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

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

RewriteCond %1%3.php -f

如果我输入任何以 / 结尾的 url(仅第二个块,它确实适用于索引文件),我的重写被破坏,即输出为 domain/language/sub/.../somepage/.php 有什么办法可以排除一个潜在的 / 在带有正则表达式的输入 url 中?

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

于 2012-09-10T19:47:40.460 回答