.htaccess无法正常工作 - 获取变量

时间:2014-03-19 12:45:49

标签: apache .htaccess mod-rewrite

我(很可能)很容易解决问题。我的简单.htaccess不能正常工作,我无法弄清楚发生了什么。

htaccess的:

RewriteEngine On
RewriteRule ^([^/]*)/$ /index.html?sport=$1 [L]

然后,当我转到http://domain.com/soccer/然后在控制台中运行此行:window.location.search.replace( "?", "" );它给了我什么,而它应该给我sport=soccer完全正如我去“{{ {3}} ......

这可能很简单,但.htaccess对我来说是个谜。

问题: 当人们输入

时,如何让重写工作
domain.com/soccer/

完全符合:

domain.com/index.html?sport=soccer

一些简单的解释(没有必要)会有很大的帮助,所以最后我可以理解.htaccess ..

欢呼声

2 个答案:

答案 0 :(得分:0)

如果您没有将客户端重定向到带有查询字符串的网址,那么您将无法访问javascript中的参数。 您可以使用addind [R]将用户重定向到重写规则:

RewriteEngine On
RewriteRule ^([^/]*)/$ /index.html?sport=$1 [L,R]

答案 1 :(得分:0)

RewriteEngine On
RewriteRule ^([^/]*)/$ /index.html?sport=$1 [L]

工作原理:获取URI,例如/soccer/。剥去前导/并将其与模式进行比较。在模式中,抓住所有内容(0个或更多字符),直到遇到/(不捕获/ here)。这被捕获到1美元,应该是足球。要求输入以/结尾。请注意,http://domain.com/soccer将不匹配,因为它没有尾随/。您可能想要进行尾随/可选:

RewriteRule ^([^/]*)/?$ /index.html?sport=$1 [L]

现在您已成功匹配模式并获得$ 1,输出重写的URI,将足球替换为$ 1:

/index.html?sport=soccer

[L]标志表示这是目前的最后一次重写规则。

请注意,您使用*作为模式中的重复次数。如果有人输入http://domain.com/,它会匹配,您将获得一个空的$ 1,导致

/index.html?sport=

可能会破裂。您可能希望从*(0或更多匹配)更改为+(1个或更多匹配)。

索引实际上是index.php,还是其他一些脚本? HTML本身无法对查询字符串执行任何操作。你也可以在这里给出正确的文件名,而不是再进一步重写它​​。