我正在构建一个Web构建器,但我不知道如何使用.htaccess。有没有办法做出类似的东西(我会用PHP写它,因为我的英语不好,所以对我来说更容易):
<?php
if(ERROR && ONE_NAME){ //There is no page like that, for example: www.example.com/thispageisntexists
//redirect to page /website.php?webname=thispageisntexists
}elseif(ERROR && TWO_OR_MORE){ //for example: www.example.com/thispageisntexists/hi.php
//redirect to page /website.php?webname=thispageisntexists&pagename=hi
//if url is www.example.com/thispageisntexists/hi.php#hi rediract to /website.php?webname=thispageisntexists&pagename=hi#hi
//if url is www.example.com/thispageisntexists/hi.php?name=vlad&last=gincher rediract to /website.php?webname=thispageisntexists&pagename=hi$name=vlad&last=gincher
//and so on...
}
?>
在website.php里面我会检查页面是否存在,如果没有,它会重定向到404.php,如果它存在,它将显示该网站。
答案 0 :(得分:1)
我发现有些网址应该被重定向或重写有些不清楚。我假设你有(或想要)像这样http://example.com/aaa
和http://example.com/aaa/bbb
的seo网址,并希望在内部将其重写为对服务器有意义的内容。
如果已存在查询字符串,您希望它能够正常工作。这意味着您必须使用[QSA]
标志连接两个查询字符串。
“没有这样的页面”转换为检查所请求的文件名是否存在的条件。您可以在第二个参数之前使用!
否定该条件。那将是RewriteCond %{REQUEST_FILENAME} !-f
。
#hi
是一个锚点。它永远不会发送到服务器。但是,即使重定向请求,您的浏览器也应自动将其附加到网址。
我看到Jon Lin已经发布了一个适合你的.htaccess
文件。我仍然会发布这个答案,以澄清那里使用的内容。
答案 1 :(得分:0)
尝试:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/website\.php
RewriteRule ^([^/]+)$ /website.php?webname=$1 [L,R,QSA]
# you can remove the "R" if you don't want to redirect the browser
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/website\.php
RewriteRule ^([^/]+)/(.*?)(\.php)?$ /website.php?webname=$1&pagename=$2 [L,R,QSA]
# you can remove the "R" if you don't want to redirect the browser
答案 2 :(得分:-1)
没有任何明显的IF-THEN-ELSE。 .htaccess 有使用RewriteCond和RewriteRule命令进行条件URL / URI重定向和重写的方法。他们使用“正则表达式”来匹配模式,因此它们不像PHP这样的真实脚本语言那么灵活,但你可以用它们做很多。
RewriteEngine On
RewriteCond %{REQUEST_FILE} !-f
RewriteRule /?(.*)$ /website.php?webname=$1 [L]
可能是我理解你想要做的事情的开始。