【问题标题】:PHP question mark on Clean URLs干净 URL 上的 PHP 问号
【发布时间】:2011-10-30 15:01:15
【问题描述】:

我目前正在尝试了解干净的网址。我曾经使用过Windows。 当我的 .htaccess 突然不起作用时,我切换到了 ubuntu 这是我的htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

所以我有这个网址

http://localhost/index.php/my_name/

我期待它在浏览器中说出“我的名字”字符串

你好我的名字

但它只会在我添加“?”时起作用在 uri 中

http://localhost/index.php?/my_name/

我很确定 mod_rewrite 已启用。我什至检查了我的 phpinfo()

【问题讨论】:

  • 也许你没有安装 mod_rewrite 模块?检查 httpd.conf 并检查您的日志 (info)
  • 你的 index.php 文件中的代码是什么?
  • 这次我启用了我的 mod_rewrite 但它仍然需要一个?为了回显 $_SERVER[QUERY_STRING]
  • @john echo $_SERVER['QUERY_STRING'];

标签: php apache mod-rewrite clean-urls


【解决方案1】:

听起来重写模块被禁用了。编辑您的 apache 配置并为 mod_rewrite 加载动态模块(如果有)。它看起来像这样:

LoadModule rewrite_module modules/mod_rewrite.so

如果您使用的是 Ubuntu,请运行 sudo a2enmod rewrite 以通过重新启动 Apache 服务器来启用以下模块:

sudo /etc/init.d/apache2 restart

【讨论】:

  • 所以我会将 LoadModule 放在 httpd.conf 中?该死的Windows用户很难xD
  • @kapitanluffy 你用的是什么 Linux 发行版?一般来说,你确实必须把它放在 httpd.conf 中,但发行版可能有自己喜欢的配置方法。
  • @kapitanluffy 我已经提到如何使用a2enmod(“Apache 2.x ENable MODule”)为 Ubuntu 启用重写模块。不要忘记重新启动服务器以使更改生效。
  • 我已经启用了它。但它仍然需要一个?为了回显 $_SERVER[QUERY_STRING] 变量
【解决方案2】:

找到了解决办法。转储 $_SERVER 变量并使用 REQUEST_URI 索引,因为 QUERY_STRING 不显示任何内容。会 +1 Lekensteyn 的回答,因为它让我走上了正确的道路

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 2014-05-19
    • 1970-01-01
    • 2014-07-16
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多