我正在尝试编写.htaccess文件,这会让我的网址对搜索引擎更具吸引力。我基本上知道如何做到这一点,但我想知道如何动态地做到这一点。
我的网址通常如下:
view.php?mode=prod&id=1234
我想做的是从网址获取id,进行数据库查询,然后将从DB返回的标题放入网址。类似的东西:
/products/This-is-the-product-title
我知道有些人用phpbb论坛网址和主题完成了这个,我试图将代码跟踪到用新标题字符串URL替换实际URL的地方,但没有运气。
我知道我可以使用id重写URL:
RewriteRule ^view\.php?mode=prod&id=([0-9]+) /products/$1/
PHP中是否有办法覆盖显示的网址?
答案 0 :(得分:6)
目前您想知道如何将丑陋的网址(例如/view.php?mode=prod&id=1234
)转换为漂亮的网址(例如/products/product-title
)。从另一个角度开始看这个。
您想要的是有人输入/products/product-title
来实际将其带到/view.php?mode=prod&id=1234
可以访问的页面。
即。你的规则可以如下:
RewriteRule ^products/([A-Za-z0-9-])/?$ /view.php?mode=prod&title=$1
然后在view.php中,根据title
进行查找,找到id
。然后照常进行。
答案 1 :(得分:2)
一种方法,就像大多数mvc框架一样。您可以将所有页面重定向到相同的index.php文件,并使用脚本确定要加载的页面。
的.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>
并且你的php文件将有一个像这样的脚本:
// get the url
$uri = (isset($_SERVER['REQUEST_URI']))?$_SERVER['REQUEST_URI']: false;
$query = (isset($_SERVER['QUERY_STRING']))?$_SERVER['QUERY_STRING']: '';
$url = str_replace($query,'',$uri); // you can edit this part to do something with the query
$arr = explode('/',$url);
array_shift($arr);
// get the correct page to display
$controller =!empty($arr[0])?$arr[0]:'home'; // $arr[0] could be product/
$action = isset($arr[1]) && !empty($arr[1])?$arr[1]:'index'; // $arr[1] can be product-title
}
当然,您必须使用此代码来制作应用程序
我希望这会有所帮助
答案 2 :(得分:0)
一种方法是输出Location:标头以强制重定向到所选的URL。