使htaccess将所有目录放入一个get变量中

时间:2011-06-03 19:03:05

标签: regex .htaccess

我正在使用需要漂亮网址的CMS。 我发现这个htaccess代码片段我认为可以解决我的所有问题:

Options +FollowSymLinks  
RewriteEngine On  

RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f  

RewriteRule ^(\w+)$ ./index.php?route=$1  

然后在index.php上我把它:

echo $_GET['route'];

如果我去mywebsite.com/cars,我可以看到“汽车”。完善。但是,如果我去mywebsite.com/cars/ford,我会看到“找不到页面”。我究竟做错了什么?我希望第一个“/”之后的所有内容都粘在路径变量中,这样我就可以将它爆炸并制造魔法。

4 个答案:

答案 0 :(得分:3)

这应该完美无缺:

RewriteEngine On  
RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f  
RewriteRule ^(.*)$ index.php [L]

您不必将URL作为GET参数传递给脚本,因为这会导致有关转义特殊字符的额外麻烦。您可以通过$ _SERVER ['REQUEST_URI']轻松访问您的网址。

答案 1 :(得分:0)

将这些行放在.htaccess文件中:

Options -MultiViews +FollowSymLinks
RewriteEngine On

RewriteRule ^(?!index\.php)(.*)$ /index.php?route=$1 [L,NC,QSA]

答案 2 :(得分:0)

\w与斜杠/不匹配。您需要.+而不是\w+

RewriteRule ^(.+)$ ./index.php?route=$1  

答案 3 :(得分:0)

首先,试试这个.htaccess:

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^.*$ index.php/$1 [NC,L]

获取查询部分(例如/ a / b / c),如下所示:

$route = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

爆炸它:

$arr = explode('/', $route)

$ arr [0]是你要运行的php脚本,$ arr [1..n]是查询部分。