Mod_Rewrite将“/about/”重定向到“page.php?page=about”


Mod_Rewrite to redirect `/about/` to `page.php?page=about`

我正在创建一个带有Mod_Rewrite的网站。目前,所有网址都被重定向到页面名称,末尾带有.php

但是/about//photos/应该重定向到page.php?page=aboutpage.php?page=photos

有没有办法做到这一点?

当前代码:

RewriteEngine on RewriteBase /new/ 
RewriteRule ^about/$ /new/page.php?page=about [L] 
RewriteRule ^([^/]*)/$ /new/$1.php [L] 
RewriteRule ^blog/([^/]*)/$ /new/blog.php?page=$1 [L] 
RewriteRule ^blog/post/([^/]*)/$ /post.php?post=$1 [L] 
RewriteRule ^blog/category/([^/]*)/$ /category.php?category=$1 [L]

这是你想要的吗?

RewriteRule ^blog(/?)$ /new/blog.php [L]
RewriteRule ^blog/([^/]*)(/?)$ /new/blog.php?page=$1 [L]
RewriteRule ^blog/post/([^/]*)(/?)$ /post.php?post=$1 [L]
RewriteRule ^blog/category/([^/]*)(/?)$ /category.php?category=$1 [L]
RewriteRule ^(?!blog)([^/]*)(/?)$ page.php?page=$1 [L]

这很简单:

RewriteRule ^about/$ page.php?page=about 
RewriteRule ^photos/$ page.php?page=photos 
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)/$ /page.php?page=$1 [L,QSA]
</IfModule>

[L] 指令的意思是"最后",因此如果匹配此指令,它不会继续应用任何进一步的重写规则。

[QSA] 指令允许您将查询参数附加到重写的地址。

在博客重写的情况下,您需要做的就是最后制定此规则。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)/$ /new/$1.php 
    RewriteRule ^blog/(.*)/$ /new/blog.php?page=$1 [L] 
    RewriteRule ^blog/post/(.*)/$ /post.php?post=$1 [L] 
    RewriteRule ^blog/category/(.*)/$ /category.php?category=$1 [L]
    RewriteRule ^(.*)/$ /page.php?page=$1 [L,QSA]
</IfModule>