我正在尝试将我的网页从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告诉我我有一个重定向循环,我可以理解。我怎么能阻止它?
答案 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.