3

我试图让我的.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>

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

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

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

4

1 回答 1

5

几个问题

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

    [QSA,L]
    
  2. 您的RewriteCondition语法看起来不正确。尝试

    RewriteCond %{REQUEST_FILENAME} !-f
    
  3. 为了安全起见,将您的表达式锚定到字符串的开头

    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    

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

AllowOverride FileInfo

更新

这是来自 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]
于 2013-01-25T03:39:57.920 回答