提问者:小点点

.htaccess-将所有现有目录的URL重定向到索引。php


我需要能够重定向一个目录中的所有URL到索引。目录中的php文件。与我找到的所有其他答案不同,这包括现有目录和现有文件。我正在使用Apache和一个。htaccess文件来实现这一点。到目前为止,我的。htaccess文件如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule /sub/directory/index\.php - [L]
RewriteRule - /sub/directory/index\.php
</IfModule>

但由于某些原因,它不会将任何内容重定向到索引。php。我也试过:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule /sub/directory/index\.php - [L]
RewriteRule ^.*$ /sub/directory/index\.php
</IfModule>

但这给了我一个不可避免的“500错误”。我做错了什么?如何将所有内容重定向到索引。php?

短暂性脑缺血发作


共3个答案

匿名用户

错误是与此ReWriteLaw

RewriteRule /sub/directory/index\.php - [L]

看看什么是匹配的?

  • 在每个目录上下文(directory和.htaccess)中,模式仅与部分路径匹配,例如“/app1/index.html”请求可能导致与“app1/index.html”或“index.html”进行比较,具体取决于重写规则的定义位置

和"按目录重写":

  • 删除的前缀总是以斜杠结尾,这意味着匹配发生在一个从来没有前导斜杠的字符串上。因此,在每个目录上下文中,^/从不匹配的模式

这意味着,前导斜杠阻止模式匹配。把它改成

RewriteRule ^sub/directory/index\.php - [L]

这将解决问题。

500内部服务器错误来自第二条规则(与不匹配的第一条规则相结合)。

RewriteRule ^.*$ /sub/directory/index\.php

这将重写对/sub/directory/index的任何请求。php,然后将其再次重写为/sub/directory/index。php,等等,直到重写模块放弃并显示“太多重定向”错误或类似错误。

匿名用户

仍然不知道为什么我的第二个原创。htaccess文件不起作用,但以下操作最终使其起作用:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/sub/directory/index.php
RewriteRule .* /sub/directory/index.php
</IfModule>

然而,我很乐意接受任何能很好地解释为什么我的第二个原始文件一直给我500个错误的答案。

匿名用户

语法错误,另外在第二次匹配(不是最后一次)后重新匹配第一条规则。

任何要求-

<IfModule mod_rewrite.c>
    RewriteEngine On
    # RewriteRule /sub/directory/index\.php - [L]
    RewriteRule ^(.*)$ /sub/directory/index.php [L]
</IfModule>

我的另一个建议(index.php是目录索引文件,在请求目录时是第一个):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^sub/directory/(.*)$ /sub/directory/ [R=301,L]
</IfModule>