foa*_*cow 4 .htaccess redirect
我被要求创建一个现有的多语言网站.
为此做准备,我必须将所有现有页面从/ path/page移动到/ en/path/page
为了维护任何现有的传入链接,我现在需要设置htaccess重定向以将其原始URL中的任何请求发送到新的/ en/path/page网址,但是我无法使其工作.
这就是我现在拥有的;
RewriteCond %{REQUEST_URI} !^/en$
RewriteRule ^(.*)$ /en/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
我认为这是为了检查所请求的URI,如果它不是以/ en开头,那么在所请求的URI之前加上/ en ...但我显然是错误的,因为它不起作用.
任何帮助赞赏.谢谢.
UPDATE.由于这是一个ExpressionEngine站点,并且有一个额外的规则来删除URL的index.php部分这里都是规则
# Rewrite for new language based urls
# This is to try and get all current pages going to /en/(old url) with a 301 redirect
RewriteCond %{REQUEST_URI} !^/en(/.*)?$
RewriteRule ^(.*)$ /en/$1 [R=301,L]
# Removes index.php
RewriteCond $1 !\.(gif|jpe?g|png|ico)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)
我也用index.php之后的语言重写尝试了这个.我仍然陷入困境.
它的作用是,检查URI是否不完全/en,因为它$指示了字符串的结尾en.
试试这个,它会检查URI是否完全没有/en或者/en/没有开始/en/,如果是这种情况,它会预先添加/en/:
RewriteCond %{REQUEST_URI} !^/en(/.*)?$
RewriteRule ^(.*)$ /en/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
更新考虑到文件中的其他规则,有.htaccess必要让语言规则再次与以下内部重定向不匹配/index.php...,否则您将最终得到无限循环.
可能有更好的方法来防止这种情况,但是我想到的第一件事就是index.php在第一个条件下检查:
RewriteCond %{REQUEST_URI} !^/(index\.php|en)(/.*)?$
Run Code Online (Sandbox Code Playgroud)
因此,这将导致规则在内部重定向后不应用.但要小心,这只解决了内部重定向进入的特定情况的问题index.php!
| 归档时间: |
|
| 查看次数: |
11658 次 |
| 最近记录: |