regex - 我的URL重写规则中出现500个内部服务器错误

标签 regex .htaccess mod-rewrite url-rewriting rewrite

如果具有以下可能的网址:

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/

相关文章:

php - 删除文件扩展名 htaccess 不起作用

php - PHP 中使用端口号和根文件夹重写 URL

python - 将 BeautifulSoup 4's ` find_all` 与正则表达式一起使用时,如何访问正则表达式匹配捕获组?

Apache .htaccess 根目录变量?

.htaccess - htaccess 重定向到 https 浏览器差异

php - 使用 htaccess 将 Javascript 转换为 php 处理程序页面

php - mod_rewrite - 如何重定向错误输入的 'pretty' url

c# - 替换sql文件的最佳步骤

regex - 如何创作和管理很长的正则表达式模式并重用模式 block ?

regex - R:gsub 和捕获