htaccess mod 用斜杠将 $_GET 重写为变量

Posted

技术标签:

【中文标题】htaccess mod 用斜杠将 $_GET 重写为变量【英文标题】:htaccess mod rewrite $_GET to variables with slashes 【发布时间】:2012-11-10 21:53:05 【问题描述】:

我想用 htaccess 将 URL 重写为可读性更好的 URL,并在 php 中使用 $_GET 变量 我有时会使用子域,因此它必须使用和不使用。网址中不需要的变量也是如此。我在 URL 中最多取 3 个变量

URL sub.mydomain.com/page/a/1/b/2/c/3 应该指向 sub.mydomain.com/page.php?a=1&b=2&c=3 并且 url sub.mydomain.com/a/1/b/2/c/3 应该指向 sub.mydomain.com/index.php?a=1&b=2&c=3 其中$_GET['a'] = 1

我在搜索和尝试了很多之后想出了这个

RewriteEngine on
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/$2.php?$3=$4&$5=$6&$7=$8 [QSA,NC]  
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/index.php?$2=$3&$4=$5&$6=$7 [QSA,NC]  
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/$2.php?$3=$4&$5=$6 [QSA,NC]  
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/index.php?$2=$3&$4=$5 [QSA,NC]  
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)/([^/]+)$ $1.domain.com/$2.php?$3=$4 [QSA,NC]  
RewriteRule ([^/]+)\.domain.com/([^/]+)/([^/]+)$ $1.domain.com/index.php?$2=$3 [QSA,NC]  
RewriteRule ([^/]+)\.domain.com/([^/]+)$ $1.domain.com/$2.php [L,QSA,NC]  

但我得到的是一个未找到的服务器错误

我不太擅长这个,所以也许我会监督一些事情。 我也希望它可以在结尾处使用和不使用斜线

我应该使用 RewriteCond 和/或设置一些选项吗?

提前致谢。

【问题讨论】:

与其在 mod_rewrite 中进行这种拆分,不如只使用一个简单的包罗万象的规则 (RewriteRule ^(.*)$ index.php?p=$1) 然后在 php.ini 中解析 url。大多数 CMS 和 Web 框架都是这样做的,因为它更灵活、更易于维护并且不依赖于 Apache。 @LieRyan,然后最多 9 个变量,好主意,下次遇到同样问题时我会尝试。 我忍不住说... Q-Dance FTW! 【参考方案1】:

使用RewriteRule 时,请不要在行中包含域名。另外,请确保先打开 RewriteEngine。像这样:

RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)$  index.php?$1=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)$  index.php?$1=$2&$3=$4
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$  index.php?$1=$2&$3=$4&$5=$6

第一行将sub.mydomain.com/a/1重写为sub.mydomain.com/page.php?a=1,第二行将sub.mydomain.com/a/1/b/2重写为sub.mydomain.com/page.php?a=1&b=2,以此类推。

【讨论】:

是的,谢谢,效果很好!我的错,RewriteEngine 已打开。我将编辑问题并将其放入代码块中。

以上是关于htaccess mod 用斜杠将 $_GET 重写为变量的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess - 递归地将斜杠映射到下划线(内部重定向)

mod_rewrite:删除尾部斜杠(只有一个!)

htaccess 和 mod_rewrite 用于 IPN 重定向

htaccess重定向,替换/用?

htaccess 条件重写规则与 mod_GeoIP

.htaccess mod rewrite 适用于 WAMPP 但不适用于 XAMPP