我想将 URL 显示
http://some.com/designit/portfolio.php?cat=website&subcat=nature
为
http://some.com/designit/portfolio/website/nature.
cat
并且subcat
可能出现在 URL 中,但并非总是如此。
我已将此.htaccess 文件放在 designit 文件夹中:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA]
RewriteRule ^portfolio/?$ portfolio.php[NC,QSA]
RewriteRule ^portfolio/([a-zA-Z0-9_-]+)/?$ portfolio.php?cat=$1[L,NC,QSA]
现在,它显示
..some.com/designit/portfolio.php
为
..some.com/designit/portfolio
但它没有显示
..some.com/designit/portfolio.php?cat=website
为
..some.com/designit/portfolio/website
我收到“内部服务器错误。服务器遇到内部错误或配置错误,无法完成您的请求。”
我需要做什么来解决这个问题?
答案1
这是您的解决方案:
http://some.com/designit/portfolio/website/nature
应该给予
http://some.com/designit/portfolio.php?cat=website&subcat=nature
您只需要一条重写规则:
RewriteEngine On
RewriteRule /designit/portfolio/([a-z]+)/([a-z]+)$ /designit/portfolio.php?cat=$1&subcat=$2
请注意:
- cat 和 subcat 只能是 alpha 字符(你可以改变它来满足你的需要)
- 您不需要测试它是否是一个文件,因为“只有字母字符 = 没有扩展名 = 您确定它不是所请求的文件”(除非您共享没有扩展名的文件,但这会很奇怪(至少))
答案2
请参阅以下网址:可能会对您有所帮助。
答案3
将更具体的规则(第二条)放在一般规则之前,它应该会起作用。
答案4
请尝试以下操作:
RewriteEngine on
RewriteRule ^portfolio/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ /disignit/portfolio.php?first-var=$1&second-var=$2 [NC]