好的,我已经在这里阅读并搜索了一些但是没有找到我的问题的答案,或者我可能对于重写url而言太新了,只是无法弄明白。这就是我想要完成的事情:
我有一个包含频道说明和ID的表格,该ID用于了解要显示的内容,因此我的网址中有这样的内容
http://www.mysite.com/page?channel=1
现在我想做的是显示:
http://www.mysite.com/page/description
仍然能够以某种方式获取该描述的ID以显示适当的内容。希望这是有道理的。我唯一想到的是在我的页面顶部,做一个:
select * from channels where description = $_GET['description']
并返回id,然后使用它。这是唯一的出路吗?或者.htaccess够好吗?这样的菜鸟:(
编辑:这是我现在的htaccess:AddType x-mapp-php5 .php
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
##This is to redirect just stream page only
RewriteRule ^stream/(.+)/([0-9]+)$ /stream.php?channel=$1
答案 0 :(得分:1)
如果你想获得ID,你可以做下一个:
粘贴下一个:
RewriteEngine On
RewriteRule ^([0-9]+)$ /page.php?channel=$1
当您点击网址时:
您可以从网址获取内容:
答案 1 :(得分:0)
有很多方法可以做到这一点。
在您的应用中使用MVC架构会强制您在一个form或another中使用路由逻辑。
您可以通过多种方式完成您特别需要的工作,包括apache RewriteMap。
我个人设计我的应用程序,它接收URI并将它们路由到控制器/页面。这可以确保PHP继续完全控制最终为请求显示的内容。
假设您的任务是美化链接而不影响应用程序的大部分内容,您需要找到一种方法将/page/description
映射到/page?channel=1
。
对于这种独特的情况,我会使用类似于decorator pattern的东西,因为从本质上讲,你的任务不需要修改现有的代码库:
RewriteEngine On
RewriteRule ^.*$ router.php [NC,L]
include'config.php';// remove your config loading from index.php
$request = $_SERVER['REQUEST_URI'];
$request = explode('/', $_request);
# in $request you will have all the uri segments now
/* complex logic to find out what page you're on */
# assuming we found out it's page/description
$_GET['channel'] = 1;// or getIdFromDescription($request[2])
# this forces the environment to believe it got a request with ?channel=1
# revert to your old request with injected environment
include'index.php';
这里的前提是index.php可以加载旧页面。而你只需要改变他们的访问方式。因此,您使用路由器将新请求映射到旧请求。
它并不完美,但在设计不佳的应用程序上效果很好。
请注意:我当前的实现不处理静态资源(图像,css,js等)