简单的URL重写不起作用

时间:2013-09-01 09:31:31

标签: .htaccess

首先,我知道有几个问题,但我的经验是其他规则有效,比如在此规则不起作用时删除.php扩展名:

RewriteRule ^hello$ marketplace [NC,R=301]

这只是一个简单的测试,它不起作用。 URL仍然是市场而不是你好。我试图删除我拥有的所有其他规则,并让上面的规则成为我的htaccess文件中唯一存在的规则,但仍然无效。

有什么想法吗? mod_rewrite显然已启用,因为其他规则有效。

经过测试且无效:

RewriteRule ^marketplace$ /hello [NC,R=301]

1 个答案:

答案 0 :(得分:1)

Highly recommend you to give a read on this "Apache mod_rewrite Introduction"

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*)\.php [NC]
RewriteRule ^ /%1 [R=301,QSA,L]

# Redirect to hello
RewriteRule ^marketplace$ /hello [R=301,NC,L]
# Show the content of marketplace on hello
RewriteRule ^hello$ /marketplace.php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]

以上是经过充分测试和运作的规则。

第一条规则会将.php重定向到类似网址的目录,例如domain.com/marketplace.php变为domain.com/marketplace

第二条规则将marketplace重定向到hello

第三条规则在内部将hello重定向到marketplace.php,因此网址仍为hello,内容为marketplace.php

最后一条规则将验证它目录是否存在但是作为php文件存在并在内部重定向到它。

因此,如果您访问marketplace.php,则会转到marketplace,然后转到hello,并且从hello中您会看到marketplace.php的内容。

如果marketplace.php不存在则会出现404错误。