通过URL传递一个干净的参数

时间:2014-01-15 15:57:37

标签: php apache .htaccess mod-rewrite clean-urls

我正在使用localhost,在我的index.php页面中,我有以下代码:

<? echo 'LANG IS '.$_GET['lang']; ?>

当我在URL上键入localhost时,它显然只显示LANG IS,但是如果我输入localhost / en,我会看到404 Not Found消息。我必须输入localhost?lang = en来显示我的index.php代码。我想输入localhost / en而不是localhost?lang = en并获得相同的结果。

我正在使用Apache2并且我启用了mod_rewrite。我还有一个带有此代码的.htaccess文件(我已经更改并测试了很多次):

RewriteEngine on
RewriteRule ^/([a-zA-Z0-9]+|)/?$ index.php?lang=$1 [L,QSA]

我已经读了几天.htaccess和干净的网址,但我无法做到这一点。有任何想法吗?非常感谢你。

3 个答案:

答案 0 :(得分:1)

很可能你的.htaccess甚至没有启用。 先验证

要检查您的.htaccess是否已启用,请尝试在.htaccess上添加相同的随机/垃圾文本,看看它是否生成500(内部服务器)错误?

它未启用,那么您需要在AllowOverride All&gt;`部分中<Directory "/var/www/行。

启用后,遵循规则应该适合您:

RewriteEngine on
RewriteRule ^(\w+)/?$ index.php?lang=$1 [L,QSA]

答案 1 :(得分:0)

尝试摆脱模式中的前导斜杠:

RewriteEngine on
RewriteRule ^([a-zA-Z0-9]+|)/?$ index.php?lang=$1 [L,QSA]

通过htaccess文件中的规则发送的URI会删除前导斜杠,因此模式需要省略它。

答案 2 :(得分:0)

问题可能出在正则表达式中。 试试这个:

RewriteEngine on
RewriteRule ^/([a-zA-Z0-9]+)/ /index.php?lang=$1 [L,QSA]