2015-02-09 106 views
1

我试图将我的网页从http://example.com/page.php重定向到http://example.com/page/。我想使用这个规则是:用正则表达式在线测试仪就像我的.htaccess文件(http://www.regextester.com/)不完整的......使用时
RewriteRule ^(.*)/([a-z0-9A-Z]+)\.(php|html)$ $1/$2/ [R=301,L]
虽然这个表达式正确检测到页面.htaccess RewriteRule不适用于“/”

如何让这个正则表达式在.htaccess文件中工作?

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

不过,Chrome的告诉我,我有一个重定向循环,这我能理解。我会如何阻止它?

+0

岂不'http://example.com/page /'给404给你? – anubhava 2015-02-09 20:56:21

+0

@anubhava一旦浏览器被重定向,我打算使用另一个RewriteRule创建一个隐藏的URL和正确的路径,但是当然我需要理解这个正则表达式来完成这个工作。 – StrongJoshua 2015-02-09 20:57:42

回答

1

.htaccess是每个目录指令,Apache从RewriteRule URI模式中删除当前目录路径(从而导致斜杠)。

您可以使用thed规则:

# 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

+0

你能检查我的编辑吗? – StrongJoshua 2015-02-09 21:14:03

+0

检查更新,您需要使用'THE_REQUEST' – anubhava 2015-02-09 21:23:16

+0

谢谢:)对于.htaccess,我仍然需要学习很多东西! – StrongJoshua 2015-02-09 21:31:06