【发布时间】:2021-05-21 14:20:15
【问题描述】:
我正在尝试通过 mod_rewrite 为我的页面添加语言前缀 例如:
https://example.com/ > https://example.com/en/
在内部它需要翻译成`https://example.com/?language=en 我已经设法为基本 url 做到这一点,但是当我尝试使用其他一些隐含的重定向来做到这一点时,它总是以无限循环结束。 例如:
https://example.com/product-p-22.html > https://example.com/en/product-p-22.html
在内部变成了`https://example.com/product_info.php?product_id=22&language=en 这是我的实际配置:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/(en|fr)/
RewriteCond %{REQUEST_URI} .(php|html) [OR]
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} !language=
RewriteRule ^(.*)$ en/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !^/example
RewriteRule ^(.*)/$ index.php?language=$1&%{QUERY_STRING}
RewriteRule ^(.*)/(.*)-p-(.*).html$ product_info.php?products_id=$3&language=$1&%{QUERY_STRING}
我尝试了许多标志,例如 L, END, DPI 或这些标志的组合,但没有运气。
当我查看调试日志时,似乎找到了正确的 url,但随后重新开始解析默认 url:
pass through /var/www/example/product_info.php
init rewrite engine with requested uri /product-p-22.html
pass through /product-p-22.html
我在这里做错了什么?
Server version: Apache/2.4.41 (Ubuntu)
【问题讨论】:
标签: apache .htaccess redirect mod-rewrite friendly-url