[英]how to rewrite url in .htaccess file
我想要这个网址
http://localhost/hiraniconfigmgr/subCategoryList.php?category=Test
至
http://localhost/hiraniconfigmgr/subCategoryList/Test
我已经尝试了这个代码,它工作正常,但它阻止js或css文件
RewriteCond %{REQUEST_URI} ((.*)/(.*))
RewriteRule ^(.*)/(.*)$ $1.php?category=$2
即使我已经使用代码隐藏文件扩展名正在工作正常的代码是在下面
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
听起来你只想重写*.php
文件。
您可以将RewriteRule
更改为:
RewriteCond %{REQUEST_URI} ((.*)/(.*))
RewriteRule ^(.*)/(.*\.php.*)$ $1.php?category=$2
此外,如果您只想重写category?=.*
查询字符串parms的路径:
RewriteCond %{REQUEST_URI} ((.*)/(.*))
RewriteRule ^(.*)/(.*\.php\?category=.*)$ $1.php?category=$2
你可能看起来像这样:
RewriteEngine on
RewriteRule ^/?hiraniconfigmgr/subCategoryList/([^/+])$ /hiraniconfigmgr/subCategoryList.php?category=$1 [END]
上述规则将在http服务器主机配置和位于主机DocumentRoot
中的动态配置文件( .htaccess
)中工作,无需任何修改。
另一种方法是将这样的动态配置文件放在/hiraniconfigmgr
文件夹中,然后代码可以缩短为:
RewriteEngine on
RewriteRule ^subCategoryList/([^/+])$ subCategoryList.php?category=$1 [END]
如果在使用此规则时收到http状态500(内部服务器错误),则可能是您使用的是非常旧版本的apache http服务器。 在这种情况下,尝试用[L]
标志替换[END]
标志,然后重试。
如果您决定使用动态配置文件(而不是真正的http服务器主机配置),那么您必须注意在主机配置中根本启用对此类文件的解释。
一般提示:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。 这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。 它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。
如果您的.htaccess位于/hiraniconfigmgr
那么您可以使用以下规则:
Options -MultiViews
RewriteEngine On
RewriteRule ^([\w-]+)/([\w-]+)/?$ $1.php?category=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
另请注意,当前URL为http://localhost/hiraniconfigmgr/subCategoryList/Test
时,相关链接可能不起作用。 要解决此问题,您可以在页面HTML的<head>
部分下方添加:
<base href="/hiraniconfigmgr/" />
以便从该基本URL解析每个相对URL ,而不是从当前页面的URL解析。
建议使用Options -MultiViews
关闭MultiViews
选项,因为您的链接名称subCategoryList
与.php
文件名相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.