无法获取mod_rewrite IfModule在.htaccess中工作

SIS*_*SYN 2 php c .htaccess mod-rewrite

我正在尝试.htaccess使用url参数将所有URL转发到单个页面,以便我可以通过这种方式处理页面检索.我想要发生的是:说它中的用户类型http://mysite.com/users/dan应该转发到页面http://mysite.com/index.php?url=/users/dan.

同样,如果用户访问了http://mysite.com/random-link它应转发的URLhttp://mysite.com/index.php?url=random-link

这是我在我的.htaccess文件中尝试的代码,但它只是向我抛出500错误:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond % (REQUEST_FILENAME) !-f
RewriteRule (.*)$ index.php?url=$1 <QSA,L>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我更新了我的代码并且它仍然是500错误 我将<和>更改为[和]并且我在RewriteCond中删除了%之后的空格,但它仍然抛出错误.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)$ index.php?url=$1 [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

我是一个新手.htaccess,所以任何帮助将不胜感激,因为我不知道是什么导致服务器超时.

Phi*_*hil 5

几个问题

  1. 重写标志放在方括号中,例如

    [QSA,L]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您的RewriteCondition语法看起来不正确 尝试

    RewriteCond %{REQUEST_FILENAME} !-f
    
    Run Code Online (Sandbox Code Playgroud)
  3. 为了安全起见,将表达式锚定到字符串的开头

    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    
    Run Code Online (Sandbox Code Playgroud)

最后,RewriteEngine后续修饰符需要FileInfo 覆盖.确保<Directory>文档根目录的服务器配置或虚拟主机部分具有

AllowOverride FileInfo
Run Code Online (Sandbox Code Playgroud)

更新

这是MVC项目的典型重写方案.这将忽略真实文件,目录和符号链接

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)