问题
这是一个非常基本/常见的问题,源于您的.htaccess
规则正在重写一个包含实际存在的目录的 url...
文件结构
>support
>sys
>issue
issue.php
.htaccess
(即目录issue
和.htaccess
文件在同一个目录下sys
:)
重写问题
然后:
RewriteEngine ON
RewriteRule ^issue/(.*)/*$ issue/issue.php?id=$1 [L]
# Note the added /* before $. In case people try to access your url with a trailing slash
不管用。这是因为(注意:->
= 重定向到):
http
://www.mysite.com/support/sys/issue/1234
-> http://www.mysite.com/support/sys/issue/issue.php? id=1234
-> http://www.mysite.com/support/sys/issue/issue.php?id=issue.php
示例/测试
尝试使用var_dump($_GET)
以下 URL:
输出将始终为:
array(1) { ["id"]=> string(9) "issue.php" }
解决方案
您有三个主要选择:
- 添加不重定向真实文件的条件
- 仅重写数字,例如重写
issue/123
但不issue/abc
- 两者都做
方法一
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^issue/(.*)/*$ issue/issue.php?id=$1 [L]
方法二
RewriteEngine ON
RewriteRule ^issue/(\d*)/*$ issue/issue.php?id=$1 [L]
方法三
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^issue/(\d*)/*$ issue/issue.php?id=$1 [L]
检索 ID
这是最简单的部分...
$issueid = $_GET['id'];