重命名 URL 隐藏文件扩展名

重命名 URL 隐藏文件扩展名

我想将 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

请参阅以下网址:可能会对您有所帮助。

http://corz.org/serv/tricks/htaccess2.php?page=all

答案3

将更具体的规则(第二条)放在一般规则之前,它应该会起作用。

答案4

请尝试以下操作:

RewriteEngine on
RewriteRule ^portfolio/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$   /disignit/portfolio.php?first-var=$1&second-var=$2  [NC]

相关内容