我们的网站允许一个漂亮的网址'etest.me/1234',其中'1234'是客户端ID。如下所示,它重定向到我们的route.php文件,我们在其中进行重定向。问题是当客户端使用'etest.me'而不使用'/ 1234'时他们会得到apache'在此服务器上找不到请求的URL / go /。'信息。我希望当'/ 1234'丢失时,网址会转到另一个页面。
请注意,我们将域和路径转发到不存在的“/ go”目录,因此下面的规则将捕获它。以下内容位于根目录中的.htaccess文件中。
RewriteEngine On
#restrict rewriting URLs ONLY to paths that DO NOT exist
RewriteCond %{SCRIPT_FILENAME} !-d
# commented out to speed up looking since we are not processig file names anyway
#RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^go/([a-zA-Z0-9/]+)$ ./route\.php?go=$1
答案 0 :(得分:2)
对我来说工作得很好。希望这对你也有用。
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^go/([a-zA-Z0-9]+)$ /route.php?go=$1 //when client id exist
RewriteRule ^([a-zA-Z0-9]+)$ /index.php // when no client id
答案 1 :(得分:0)
您可以添加新规则来处理这种情况:
RewriteRule ^go/$ ./another_script\.php
答案 2 :(得分:0)
我接受了Sahil的回答并发布了以下整个逻辑供其他人使用:
Domain: etest.me
Pretty URL: etest.me/1234 (where '1234' is a client id)
Forwarded to: etesting.io/go (with forward path option selected so the '/1234' will be include in the forward)
注意:服务器上没有'/ go'目录,'/ go'用于触发重定向。
想要'etest.me'(没有客户端ID)转到根目录中的索引文件。
以下是.htaccess中的重写规则:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^go/([a-zA-Z0-9/]*)$ ./route\.php?go=$1
这是route.php代码:
<?php
if($_GET['go']){
$a = explode('/', $_GET['go']);
$c = count($a);
if($c == 1 || $c == 2){
header('location: ../../index.php?aid=' . $a[0] . '&tid=' . $a[1]);
exit;
}
else{
die('Invalid URL');
}
}
else{
header('location: ../index.php');
exit;
}
最后是index.php文件:
if($_GET['aid'] && $_GET['tid']){
header('location: test/register.php?aid=' . $_GET['aid'] . '&tid=' . $_GET['tid']);
exit;
}
elseif($_GET['aid']){
header('location: test/index.php?aid=' . $_GET['aid']);
exit;
}
else{
header('location: account/index.php?' . $_SERVER['QUERY_STRING']);
exit;
}
希望这有助于将来的某些人。
我想要一个更优雅的解决方案,但它现在已经落后于我了......