我正在使用需要漂亮网址的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,我会看到“找不到页面”。我究竟做错了什么?我希望第一个“/”之后的所有内容都粘在路径变量中,这样我就可以将它爆炸并制造魔法。
答案 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]是查询部分。