我正在设计我的申请。我应该做下一件事。在mod_rewrite的帮助下,所有GET参数(?var = value)都应转换为/ var / value。我怎样才能做到这一点?我只有1个.php文件(index.php),因为我使用了FrontController模式。你能帮我解决这个mod_rewrite规则吗?
抱歉,我的英文。提前谢谢。
答案 0 :(得分:6)
我在使用“seo友好”网址的网站上执行此类操作。
在.htaccess中:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]
然后在index.php上:
if ($_SERVER['REQUEST_URI']=="/home") {
include ("home.php");
}
.htaccess规则告诉它如果找不到要求的文件或目录,则加载index.php。然后你只需要解析请求URI来决定index.php应该做什么。
答案 1 :(得分:5)
.htaccess中的以下代码将重写您的网址,例如: /api?other=parameters&added=true
至/?api=true&other=parameters&added=true
RewriteRule ^api/ /index.php?api=true&%{QUERY_STRING} [L]
答案 2 :(得分:3)
<强>的.htaccess 强>
RewriteEngine On
# generic: ?var=value
# you can retrieve /something by looking at $_GET['something']
RewriteRule ^(.+)$ /?var=$1
# but depending on your current links, you might
# need to map everything out. Examples:
# /users/1
# to: ?p=users&userId=1
RewriteRule ^users/([0-9]+)$ /?p=users&userId=$1
# /articles/123/asc
# to: ?p=articles&show=123&sort=asc
RewriteRule ^articles/([0-9]+)/(asc|desc)$ /?p=articles&show=$1&sort=$2
# you can add /? at the end to make a trailing slash work as well:
# /something or /something/
# to: ?var=something
RewriteRule ^(.+)/?$ /?var=$1
第一部分是收到的URL。第二部分是您可以使用$_GET
读取的重写URL。 (
和)
之间的所有内容都被视为变量。第一个是$1
,第二个是$2
。这样,您就可以确定变量应该在重写的URL中的确切位置,从而知道如何检索它们。
您可以使用(.+)
保持一般性并允许“一切”。这仅仅意味着:任何字符(+
)中的一个或多个(.
)。或者更具体,例如只允许数字:[0-9]+
(0到9范围内的一个或多个字符)。您可以在http://www.regular-expressions.info/上找到有关正则表达式的更多信息。这是一个测试它们的好网站:http://gskinner.com/RegExr/。
答案 3 :(得分:1)
AFAIK mod_rewrite不处理问号后的参数 - 重写规则的regexp end-of-line与'?'之前的路径末尾匹配。所以,你几乎只限于传递参数,或者在重写时完全丢弃它们。