我们都知道wordpress有简单的.htaccess代码,如下所示 RewriteEngine on RewriteBase /
# only rewrite if the requested file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-s
# pass the rest of the request into index.php to handle
RewriteRule ^(.*)$ /index.php/$1 [L]
但是,如果我将所有请求重定向到index.php,我认为处理php中的每次重写变得非常麻烦。目前我有一个逻辑,比如维护一个包含所有有效重定向的db表。但我仍然不知道如何处理规则([0-9] +)。
如果有人之前已经实现过这样的事情或者有逻辑,那么请你指导我这个问题
这样做的唯一目的是因为我希望在我的网站菜单中添加/删除类别时具有灵活性。我不想每次都去.htaccess并在所有地方编辑它。我想创建更像CMS的用户可以添加删除类别
答案 0 :(得分:1)
我不明白这个问题,WordPress已经为你处理了这一切。除非你的意思是你没有使用WordPress?在这种情况下是的,你可以这样做。你想要什么样的URL结构?你可以像这样写一条规则:
RewriteRule ^category/(.*)$ categories.php?cat=$1 [L]
将domain.com/category/dogs等网址重写为domain.com/categories.php?cat=dogs。显然你可以根据自己的喜好进行调整,并为标签,帖子等编写一些类似的规则。
在php中处理路由将是一个更加动态和“优雅”的解决方案。您可以尝试使用类似CodeIgniter的框架,这将自动为您管理路由并使定义自定义路由变得容易。可能比编写一堆.htaccess规则更好。
答案 1 :(得分:1)
我的建议是建立基于php的路由,基本的想法是你做这样的事情:
RewriteEngine On
# skip all files with extensions other than .html
# this way if you want you can append the .html to dynamic pages
# which wont really exist as a file
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_URI} !\.html$
RewriteRule .* - [L]
// redirect everything to your front controller
RewriteRule ^(.*)$ index.php [QSA,L]
注意你如何让每一个人都去index.php
,但你不会重写任何变量或任何东西。这是因为您将根据URL的模式使用php计算出什么。为此,您需要实现路由器。基本上,路由器接收请求并将其与模式匹配,然后根据模式确定任何参数。
现有的图书馆可供您使用。例如Zend_Controller_Router
。