我正在尝试使用.htaccess从$ _GET请求重写一些网址而没有运气。
(左侧=原始网址,右侧=新网址)
的语法如何?/?lang=en ---> /en/
/index?lang=en ----> /en/index
/pageA?lang=de ----> /de/pageA
/pageB/lang=es ----> /es/pageB
这可以在不编辑所有页面的情况下完成并在.htaccess文件中获取请求吗?
提前感谢您的帮助。
修改
到目前为止,这是我的代码,用于消除URL
末尾的.phpOptions -Indexes +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
这只是正在运作的代码。
答案 0 :(得分:0)
这样的事情可行:
RewriteRule ^([a-z]+)/([a-zA-Z]+)/$ /$2?lang=$1 [QSA]
答案 1 :(得分:0)
这就是我提出的:
RewriteRule ^(([-A-Za-z0-9_]+)?(\?|\/)lang=([A-Za-z]{2}))$ redirect.php?page=$1 [L]
编辑:
如果要重定向到干净的URL,那么您可能想要做的就是创建一个中央php页面。从该页面确定您要去的地方,然后执行header("Location: ".$real_page); exit;
以下是一个例子:
<?php
// REDIRECT.PHP
$page = $_GET['page'];
$real_page = preg_replace('/([-A-Z0-9_]+)?(\?|\/)lang=([A-Z]{2})/i', '/$3/$1', $page);
header("Location: ".$real_page);
exit;
编辑2:
如果你想保留.htaccess,而不是乱用PHP重定向,你可以使用[R=302]
标志。
RewriteRule ^([-A-Za-z0-9_]+)?(\?|\/)lang=([A-Za-z]{2})$ /$3/$1 [R=302]
这实际上应该为您更改网址。