首先,我知道有几个问题,但我的经验是其他规则有效,比如在此规则不起作用时删除.php扩展名:
RewriteRule ^hello$ marketplace [NC,R=301]
这只是一个简单的测试,它不起作用。 URL仍然是市场而不是你好。我试图删除我拥有的所有其他规则,并让上面的规则成为我的htaccess文件中唯一存在的规则,但仍然无效。
有什么想法吗? mod_rewrite显然已启用,因为其他规则有效。
经过测试且无效:
RewriteRule ^marketplace$ /hello [NC,R=301]
答案 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错误。