繁体   English   中英

从获取请求中使用htaccess清理URL

[英]clean URL's with htaccess from get request

我试图用.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]

只有代码起作用了。

这样的事情可能会起作用:

RewriteRule ^([a-z]+)/([a-zA-Z]+)/$ /$2?lang=$1 [QSA]

这是我想出的:

RewriteRule ^(([-A-Za-z0-9_]+)?(\?|\/)lang=([A-Za-z]{2}))$ redirect.php?page=$1 [L]

编辑:

如果您想重定向到干净的URL,那么您可能要做的就是制作一个中央php页面。 在该页面上,确定要前往的位置,然后执行header("Location: ".$real_page); exit; 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]

那实际上应该为您更改URL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM