如果具有以下可能的网址:
http://stackoverflow.com/categories/
http://stackoverflow.com/categories/category-type
http://stackoverflow.com/categories/category-type/category
http://stackoverflow.com/categories/category-type/category/sub-category
我想重写为
http://stackoverflow.com/categories/
http://stackoverflow.com/categories/?category-type=category-type
http://stackoverflow.com/categories/?category-type=category-type&category=category
http://stackoverflow.com/categories/?category-type=category-type&category=category&sub-category=sub-category
这是我的重写规则:
RewriteRule ^categories/([^/]*)/([^/]*)/([^/]+)(/)?$ /categories/?category-type=$1&category=$2&sub-category=$3 [NC,L]
RewriteRule ^categories/([^/]*)/([^/]+)(/)?$ /categories/?category-category=$1&category-=$2 [NC,L]
RewriteRule ^categories/([^?][^/]*)(/)?$ /categories/?category-type=$1 [NC,L]
最后一条规则是
500 Internal Server Error
。是什么原因造成的?
最佳答案
我们可能永远都在这里试图修复它,但是一旦您创建了一些新的url类型,您将再次变得懒惰。我曾经在我的旧网站中使用复杂的附件,但是自从几年前以来,我并没有在附件中投入太多的逻辑,所有代理都是php路由器的。
这是一个更加灵活的解决方案,您可以创建更复杂的规则,更轻松地更改所有内容,并且如果您更改服务器,将应用程序安装在另一台服务器或其他文件夹中或添加新路由,也可以完美地工作。
这就是Zend Framework 2的作用,或多或少就像我正在使用的那样:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
所有规则意味着,如果请求不是实际的文件或目录,只需将其发送到index.php
在那里,在索引php中,您解析实际的URL并填充$ _GET变量。
关于regex - 我的URL重写规则中出现500个内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20389219/