我的代码
RewriteRule ^walls/([0-9a-zA-Z-_]+) display.php?art_nm=$1 [NC,L]
我得到的是:
website.com/walls/i_love_coding
我需要的是:
website.com/i_love_coding
答案 0 :(得分:1)
您可能应该使用front controller pattern。基本上,您向前端控制器发出每个请求,决定要做什么。
<强>的.htaccess 强>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L]
</IfModule>
然后,使用“前端控制器”根据$_SERVER['REQUEST_URI']
转发请求以更正脚本。
<强>的index.php 强>
<?php
$name = trim($_SERVER['REQUEST_URI'], '/');
$page = find_page_by_name($name);
if ($page) {
require $page;
} else {
require __DIR__.'/errors/404.php';
}
谨慎使用find_page_by_name
功能,不返回未经授权的文件路径;您应确保您的路径位于特定目录中(请参阅realpath和strpos)。
例如,攻击者可能会尝试获取http://example.com/../../etc/passwd !!!