如何编写.htaccess文件以获取斜杠后的所有内容作为参数?

时间:2015-10-11 12:15:30

标签: php apache .htaccess

我有一个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]

1 个答案:

答案 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]

一些注意事项:

  • 前三个RewriteRules是必需的例外,因为您的给定请求不遵循理智和常见模式。他们看起来有些混乱。
  • 这肯定不是没有问题的,我没有测试它,只打了它。
  • 这假设了"页面"要求的例子,如评论中所讨论的那样。
  • 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服务器配置,那么请在其中定义此类规则。