![](/img/trans.png)
[英]How do I execute an insert query with an unknown number of parameters in PHP?
[英]How do I parse URL query via .htaccess with unknown number of preset parameters
我需要有关Apache的mod_rewrite规则的帮助。
我从PHP和.htaccess
开始。 我一直在尝试获取用户的查询URL字符串,将“语言”和“页面”解析为GET变量,将它们传递到root用户的index.php
文件中,并使用已编译的网页响应用户。 当未设置用户URL中的一个或两个参数时,我还需要脚本正确理解默认语言(ee)和页面(index)值。 例子:
1) "example.com/" --> "example.com/index.php?page=index&lang=ee"
2) "example.com/se/samples" --> "example.com/index.php?page=samples&lang=se"
3) "example.com/se/" --> "example.com/index.php?page=index&lang=se"
4) "example.com/contact" --> "example.com/index.php?page=contact&lang=ee"
5) "example.com/ru/contact" --> "example.com/index.php?page=contact&lang=ru"
我需要Apache始终仅显示“清除URL”,例如: example.com/se/samples
。 带有GET查询的“丑陋的URL”仅出于技术原因,对用户和/或搜索引擎不可见。 我还担心安全性问题,因此我很乐意在.htaccess
和/或index.php
使用手动设置允许参数的白名单。
我在服务器端具有以下网站文件结构:
www:
| .htaccess
| __php__.php
| index.php <-- controller
|
+---css [...]
|
+---img [...]
|
+---js [...]
|
+---lang <-- arrays of languages
| lang_ee.json
| lang_en.json
| lang_ru.json
| lang_se.json
| sliders.json
|
\---tmpl <-- layout templates of pages
contact.php
footer.php
header.php
index.php
nav.php
retail.php
samples.php
services.php
我需要在前端使用以下站点地图结构:
lang=ee page=index example.com/
lang=ee page=services example.com/services
lang=ee page=retail example.com/retail
lang=ee page=samples example.com/samples
lang=ee page=contact example.com/contact
lang=en page=index example.com/en/
lang=en page=services example.com/en/services
lang=en page=retail example.com/en/retail
lang=en page=samples example.com/en/samples
lang=en page=contact example.com/en/contact
lang=ru page=index example.com/ru/
lang=ru page=services example.com/ru/services
lang=ru page=retail example.com/ru/retail
lang=ru page=samples example.com/ru/samples
lang=ru page=contact example.com/ru/contact
lang=se page=index example.com/se/
lang=se page=services example.com/se/services
lang=se page=retail example.com/se/retail
lang=se page=samples example.com/se/samples
lang=se page=contact example.com/se/contact
我目前的index.php
:
<?php
if (isset($_GET['page'])) {
$page=$_GET['page'];
} else {
$page='index';
}
if (isset($_GET['lang'])) {
$lang=$_GET['lang'];
}
else { $lang='ee'; }
// Include configs
include('__php__.php');
// Assign template
include (ROOT_DIR.'tmpl/'.$page.'.php');
?>
我当前的.htaccess
包括几次不幸的尝试:
# URLs rewrite
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
#RewriteRule ^(services|retail|samples|contact)/?$ $1.php [L]
#RewriteRule ^(index|services|retail|samples|contact)$ index.php?page=$1&lang=ee [L]
#RewriteRule ^([^/].*)([^/].*)$ index.php?page=$2&lang=$1 [L]
#RewriteRule ^(en|ru|se)/(index|services|retail|samples|contact)$ index.php?page=$2&lang=$1 [L]
#RewriteRule ^([^(en|ru|se)].*)/$ index.php?page=$1&lang=ee [N]
#RewriteRule ^(.*)/(.*)$ index.php?page=$2&lang=$1 [L]
#RewriteRule ^(en|ru|se)/(services|retail|samples|contact)/?$ $1/$2.php [L]
#FFFFFUUU..
我设法使其与一个或两个参数集一起工作(例如example.com/se/
或example.com/se/contact
),但是我不知道进一步挖掘使脚本通用的想法。 请原谅我生锈的英语。
编辑我只需要我的脚本就可以“听”以下语言: en
/ ru
/ se
和ee
如果未设置); 和页面: services
, retail
, samples
, contact
和index
如果未设置)。 我仍然需要example.com/blabla
上的404
页面。 这就是我在问题标题中使用“预设参数”的意思。
这可能起作用:
RewriteEngine on
RewriteRule ^([A-Za-z]{2}+)/?$ /index.php?page=index&lang=$1 [R=301,NC,L]
RewriteRule ^([A-Za-z]{2}+)/(.*)$ /index.php?page=$2&lang=$1 [R=301,NC,L]
RewriteRule ^$ /index.php?page=index&lang=ee [R=301,NC,L]
RewriteRule ^((?!index.php).*)$ /index.php?page=$1&lang=ee [R=301,NC,L]
编辑:
RewriteRule ^$ /index.php?page=index&lang=ee [NC,L]
RewriteRule ^(services|retail|samples|contact)/?$ /index.php?page=$1&lang=ee [NC,L]
RewriteRule ^(en|ru|se)/?$ /index.php?page=index&lang=$1 [NC,L]
RewriteRule ^(en|ru|se)/(services|retail|samples|contact)?$ /index.php?page=$2&lang=$1 [NC,L]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.