2012-11-22 185 views
7

我想用htaccess改写URL的更好的可读URL并在PHP中使用$ _GET变量
我有时使用子域,所以它必须使用和不使用子域。也是在url中不需要的变量。我拍摄最大3个变量中的URL

的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和/或设置一些选项吗?

在此先感谢。

+3

而不是在mod_rewrite中进行分割,为什么不只是有一个简单的catchall规则('RewriteRule ^(。*)$ index.php?p = $ 1'),然后解析url,但是你想在php 。大多数CMS和Web框架都是这样做的,因为它更灵活,更容易维护,并且不依赖于Apache。 –

+0

@LieRyan然后最多9个变量,好主意我会在下次遇到同样的问题时尝试。 – Dediqated

+0

我不能帮忙,但说...... Q-Dance FTW! –

回答

7

使用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/1sub.mydomain.com/page.php?a=1,第二重写sub.mydomain.com/a/1/b/2sub.mydomain.com/page.php?a=1&b=2,等等。

+0

是的,谢谢,这很好!我的坏,RewriteEngine被打开。我将编辑问题并将其放入代码块中。 – Dediqated