我们有一个重写规则设置,可将/spaces/test.php
映射到/areas/spaces/test/
,如下所示:
RewriteRule ^areas/spaces/?$ spaces/$1.php
因此URL的映射方式不同,但基础逻辑/代码仍然存在
spaces/test.php
。
因此,如果我们现在可以访问areas/spaces/test/
或spaces/test.php
,那么它们都能正常运行。
但是..我希望301重定向spaces/test.php
> areas/spaces/test/
。
这可能吗?
答案 0 :(得分:1)
您可以使用以下重写规则来完成您想要的任何事情。
RewriteRule ^spaces/([^/.]+).php$ /areas/spaces/$1/ [QSA,R=301,L]
RewriteRule ^areas/spaces/?$ spaces/$1.php [L]
我将引导您完成我添加的第一行:
^spaces/([^/.]+)\.php$
/areas/spaces/$1/
R=301
QSA
告诉Apache附加任何传递到新位置的查询字符串。L
告诉Apache在匹配时停止重写该行,这样就会发生重定向并重写停止。在下一个正确位置请求时,第二行将根据需要匹配,因此在内部它是处理请求的.php
文件。答案 1 :(得分:0)
这应该这样做:
RewriteRule ^areas/spaces/([^/.]+)/$ spaces/$1.php [L,E=CLEAN_URL:1]
RewriteCond %{ENV:REDIRECT_CLEAN_URL} !1
RewriteRule ^spaces/([^/.]+).php$ areas/spaces/$1/ [R=301,L]