我有一个URL,即“www.mysite.com”。我想通过以下方式通过url发送参数:
www.mysite.com/count
www.mysite.com/search_caption?query=huha
www.mysite.com/page=1
www.mysite.com/search_caption?query=huha&page=1
在每种情况下,我都希望为每种情况加载index.php页面,其参数如下:
var_dump($_REQUEST) results into [count]
var_dump($_REQUEST) results into [query="huha"]
var_dump($_REQUEST) results into [page=1]
var_dump($_REQUEST) results into [query="huha",page=1]
如何编写.htaccess文件来实现此目的?
我正在使用此代码,但它只捕获了“?”之后的参数而不是在第一次斜线后的所有事情
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^([^/]+)/?$ index.php?{REQUEST_FILENAME}=$1 [L,QSA]
RewriteRule .* /index.php [L]
答案 0 :(得分:2)
这样的东西应该接近,尽管你真的应该考虑那些奇怪的URL模式,而不是试图在重写之后修复它们......
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L,QSA]
RewriteRule ^count index.php?count=1 [L]
RewriteRule ^page/(.*)$ index.php?page=1 [L]
RewriteRule ^ index.php [L,QSA]
一些注意事项:
index.php
实际上必须作为文件存在,否则会导致重写循环鉴于所有这些重写应该发生:
www.mysite.com/count => index.php?count=1
www.mysite.com/search_caption?query=huha => index.php?query=huha
www.mysite.com/page/1 => index.php?page=1
www.mysite.com/search_caption?query=huha&page=1 => index.php?query=huha&page=1
另请注意,上述规则是针对.htaccess
样式文件编写的。要用作普通规则,因此在http服务器主机配置中,它们必须略有不同。如果您确实需要,则应该只使用.htaccess
样式文件,因此如果您无法访问配置文件。如果可能的话,你应该总是尽量避免使用这些文件。众所周知,它们容易出错,难以设置和调试,并且确实减慢了服务器速度。因此,如果您有权访问http服务器配置,那么请在其中定义此类规则。