【发布时间】:2016-08-19 18:07:08
【问题描述】:
为了制作友好的 URL,以下是应用的 htaccess 代码:
RewriteEngine On
RewriteCond %{THE_REQUEST} /.+?\.php[\s?] [NC]
RewriteRule ^ - [F]
RewriteRule ^([^/\.]+)$ index.php?id1=$1 [NC,L,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)$ index.php?id1=$1&id2=$2 [NC,L,QSA]
现在适用于:
mydomain.com/pages到mydomain.com/index.php?id1=pagesmydomain.com/pages/xyz到mydomain.com/index.php?id1=pages&id2=xyz
另外,当我在 URL 中手动输入 mydomain.com/index.php?id1=pages&id2=xyz 时,它会重定向到 mydomain.com。
现在,当我输入另一个类似 mydomain.com/templates 的模板是存在的目录时,它会重定向到 mydomain.com/templates/?id1=templates
我尝试添加这些行但徒劳无功:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]
我的目录结构:
www/
.htaccess
index.php <--- main router
templates/
img/
css/
...
...
other_directories/
...
...
index.php 应该收到 id1 和 id2。
我应该如何使用 htaccess 避免这种情况(当存在具有该名称的目录时)?
注意:这个问题已经被问到here。但是又发帖了,既没有获得足够的浏览量,也没有回答问题!
【问题讨论】:
-
您的目录(如模板)是静态的还是动态的?
-
目录是静态的吧?它位于文件系统位置
-
您可以添加不想重定向的目录; RewriteRule ^(templates|another_directory)($|/) - [L]
-
谢谢.. 但是我可以看到主目录的索引页仍然没有被指向.. 它的指向模板目录(我启用了目录列表,所以它显示了目录内容)
标签: php apache .htaccess redirect mod-rewrite