【问题标题】:Apache rewrite issue with php parametersApache 用 php 参数重写问题
【发布时间】:2014-04-06 17:21:51
【问题描述】:

我想以以下格式访问我的页面:mysite.com/parameter 而不是 mysite.com/index.php?param=parameter。我玩弄了 httpd.conf 文件,我管理的最好的是 mysite.com/dir/parameter。

我的配置如下:

        Options Indexes MultiViews Includes ExecCGI
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        RewriteEngine On
        RewriteRule /(.*)$ index.php?hash=$1 [NC] 

如何摆脱过多的目录?

改为:

           RewriteEngine On
           RewriteRule ^(.*) index.php?hash=$1 [NC]

尝试打开页面时出现以下错误

禁止

您无权访问此服务器上的 /Šw^Æ∼i。

【问题讨论】:

  • 该配置是在.htaccess 样式文件中(正如问题标签所暗示的那样)还是在服务器配置中?

标签: php apache .htaccess


【解决方案1】:

如果您在 .htaccess 样式文件中具有该配置,则删除前导斜杠 (/) 并防止将请求重写为实际存在的内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?hash=$1 [L,NC]

您可能还想添加一个附加的QSA 标志,以防您需要传递其他参数。

如果您将此类配置放在真实服务器配置中(如果您有访问权限,这是更好的选择),那么您当前的设置应该没问题。 .htaccess 样式文件大大降低了服务器速度,众所周知,它们容易出错且难以调试。

【讨论】:

  • 谢谢,有帮助。案件结案!
  • 感谢您的反馈!很高兴!
【解决方案2】:

首先,您必须确保不会通过将 url 重写为与重写规则再次匹配的内容来创建无限循环,这可能是您的目录问题的原因:

RewriteRule /(.*) index.php?hash=$1 [NC,L]

其次,检查文件是否存在可能会有所帮助,例如如果您想提供图像或 robots.txt,如果您检查 index.php 是否存在,这也可以解决您的循环问题:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /(.*) index.php?hash=$1 [NC,L]

对现有文件的请求只会落入对本地文件的正常处理中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2015-12-06
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多