使用来自get请求的htaccess清除URL

时间:2014-02-28 17:03:10

标签: php apache .htaccess mod-rewrite

我正在尝试使用.htaccess从$ _GET请求重写一些网址而没有运气。

(左侧=原始网址,右侧=新网址)

的语法如何?
/?lang=en   --->  /en/
/index?lang=en ----> /en/index
/pageA?lang=de  ----> /de/pageA
/pageB/lang=es ---->  /es/pageB

这可以在不编辑所有页面的情况下完成并在.htaccess文件中获取请求吗?

提前感谢您的帮助。

修改

到目前为止,这是我的代码,用于消除URL

末尾的.php
Options -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]

这只是正在运作的代码。

2 个答案:

答案 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]

这实际上应该为您更改网址。