繁体   English   中英

如何在.htaccess文件中重写url

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM