【发布时间】:2014-06-07 00:12:30
【问题描述】:
我正在尝试使用 .htaccess 解析 url 并拉取我们的 1 或 2 个参数以根据 url 加载内容。
如果只有第一个 url 参数 (site.com/param1) 存在,那很好,应该路由到 index.php?c=param 但也可以是 (site.com/param1/param2) 并路由到索引.php?c=param1&p=param2
它在 Mavericks 上运行的 MAMP PRO 上完美运行,但是当我将 repo 克隆到我们的 VPS 上时,我得到了一个重定向循环。该站点有一个管理区域,因此我需要忽略遵循该模式的任何 url
site.com/admin
“可解析”网址遵循这种模式
site.com/param1
或
site.com/param1/param2
.htaccess 看起来像这样:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
## SEO REWRITES ###
RewriteRule ^(admin) - [L]
RewriteRule ^/?([a-zA-Z0-9_]+)/?$ /index.php?page=$1
RewriteRule ^/?([a-zA-Z0-9_]+)/([0-9]+)/?$ /index.php?page=$1&e=$2
## URL PARSE ##
RewriteRule ^([^/]+)$ /index.php?c=$1
RewriteRule ^([^/]+)/([^/]+)$ /index.php?c=$1&p=$2
</IfModule>
我迷路了,但我觉得我在这里错过了一些简单的东西。最令人困惑的部分是它从开发开始就一直有效。任何人都知道为什么在带有 apache 的 vps 上而不是在 localhost 上运行时重定向循环的原因,或者更重要的是如何在实时服务器上解析它。
我现在使用这个方法,除非 url 中缺少尾部斜杠,然后它会中断,我尝试了 dif 变体以使其匹配而没有尾部斜杠,但我只是得到 404 或内部服务器错误:
<IfModule mod_rewrite.c>
重写引擎开启 重写基础/
RewriteRule ^(admin) - [L]
RewriteRule ^/?([a-zA-Z0-9_]+)/?$ /index.php?page=$1
RewriteRule ^/?([a-zA-Z0-9_]+)/([0-9]+)/?$ /index.php?page=$1&e=$2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)/([^/]+)$ /index.php?c=$1&p=$2 [L,QSA]
RewriteRule ^/?([^/]+)/$ /index.php?c=$1&p=index [L,QSA]
</IfModule>
【问题讨论】:
标签: apache .htaccess mod-rewrite redirect