.htaccess RewriteRule不适用于" /"

时间:2015-02-09 20:51:56

标签: regex .htaccess mod-rewrite

我正在尝试将我的网页从http://example.com/page.php重定向到http://example.com/page/。我试图使用的规则如下:
RewriteRule ^(.*)/([a-z0-9A-Z]+)\.(php|html)$ $1/$2/ [R=301,L]
虽然这个正则表达式在与(http://www.regextester.com/)在线正则表达式测试器一起使用时正确检测到页面,但它在我的.htaccess文件中没有完成...

如何在.htaccess文件中使用此正则表达式?

修改
所以我现在要确保实际页面可见:
RewriteRule ^([a-z0-9A-Z]+)\.(php|html)$ /$1/ [R=301,L]
RewriteRule ^([a-z0-9A-Z]+)/$ /$1.php [L]

然而,Chrome告诉我我有一个重定向循环,我可以理解。我怎么能阻止它?

1 个答案:

答案 0 :(得分:1)

每个目录指令

.htaccess,Apache从RewriteRule URI模式中剥离当前目录路径(从而导致斜杠)。

您可以使用以下规则:

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,L,NE]

# To internally forward /dir/file to /dir/file.php
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

这会将/page.php重定向到/page/php/,但如果没有其他规则,您将获得404.