【问题标题】:RewriteRule issue - modular php Bad RequestRewriteRule 问题 - 模块化 php 错误请求
【发布时间】:2013-10-20 09:23:16
【问题描述】:

我最终想要做的是 /about 而不是 /main.php?p=about。我看过一些帖子 (like this!),但似乎没有一个对我有用。

首先,我将 ReWrite 规则放在 httpd.conf 中。这是正确的吗? 很多地方都提到了 .htaccess,但我在任何看起来很重要的目录中都没有该文件(唯一的参考在 phpMyAdmin 中)。我将文件从 phpMyAdmin 复制到 htdocs 中,然后用一个简单的规则替换文本:

RewriteEngine on
RewriteRule home main.php [L]

然而 localhost/home 报告了一个错误的请求。

首先我应该使用哪个文件以及如果 .htaccess 我应该将文件放在哪里以及我必须在任何其他文件中引用它吗?其次,以下可能适用于我想要的方法吗?

RewriteEngine on
RewriteRule ^([^/]+)/?  main.php?p=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

感谢您的澄清和帮助。 迈克

【问题讨论】:

    标签: php regex apache .htaccess mod-rewrite


    【解决方案1】:

    RewriteRule 之后实际上有条件 (RewriteCond)。应该是相反的。

    启用mod_rewrite.htaccesshttpd.conf,然后将此代码放入您的DOCUMENT_ROOT/.htaccess 文件中:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)$ /main.php?p=$1 [L,QSA]
    
    RewriteRule ^home/?$ main.php [L,NC]
    

    建议阅读:Apache mod_rewrite Introduction

    【讨论】:

    • mod_rewrite 已启用,但 .htaccess 在哪里通过 httpd.conf 启用?我在 cmets 中有 2 次提到它:Require all denied 是第一个,然后另一个是:AllowOverride All
    • 它正在工作。它一定是丢失的 .htaccesss 文件。非常感谢 :) 再过 10 分钟我无法接受您的回答
    • 你实际上在RewriteRule之后有条件(RewriteCond)。应该反过来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多