我需要能够重定向一个目录中的所有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?
短暂性脑缺血发作
错误是与此ReWriteLaw
RewriteRule /sub/directory/index\.php - [L]
看看什么是匹配的?
和"按目录重写":
这意味着,前导斜杠阻止模式匹配。把它改成
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>