2017-02-11 161 views
1

我想从这个如何重写URL中的.htaccess文件

http://localhost/hiraniconfigmgr/subCategoryList.php?category=Test 

http://localhost/hiraniconfigmgr/subCategoryList/Test 

我有尝试这个代码,它工作正常的网址,但它阻止JS或CSS文件

RewriteCond %{REQUEST_URI} ((.*)/(.*)) 
RewriteRule ^(.*)/(.*)$ $1.php?category=$2 

为隐藏文件扩展名,甚至我已经使用的代码工作正常代码belowe

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php 

回答

0

如果你的.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] 

也请记住,当您目前的网址是 http://localhost/hiraniconfigmgr/subCategoryList/Test你相关的链接可能无法正常工作。为了解决这个问题,你可以略低于您网页的HTML的<head>部分补充一点:

<base href="/hiraniconfigmgr/" /> 

让每一位相对URL是从基本URL,而不是从当前页面的URL解决。

关闭MultiViews选项使用Options -MultiViews,因为您的链接名称subCategoryList.php文件名相同,因此建议您使用此选项。

0

这听起来像你只想重写*.php文件。

你可以改变你RewriteRule到:

RewriteCond %{REQUEST_URI} ((.*)/(.*)) 
RewriteRule ^(.*)/(.*\.php.*)$ $1.php?category=$2 

此外,如果你只是想用category?=.*查询字符串PARMS重写路径:

RewriteCond %{REQUEST_URI} ((.*)/(.*)) 
RewriteRule ^(.*)/(.*\.php\?category=.*)$ $1.php?category=$2 
0

你可能lookig类似的东西:

RewriteEngine on 
RewriteRule ^/?hiraniconfigmgr/subCategoryList/([^/+])$ /hiraniconfigmgr/subCategoryList.php?category=$1 [END] 

上述规则将工作k位于主机DocumentRoot中的http服务器主机配置和动态配置文件(.htaccess)中,不做任何修改。

另一种方法是将这样的动态配置文件/hiraniconfigmgr文件夹内,则该代码可以被缩短到的是:

RewriteEngine on 
RewriteRule ^subCategoryList/([^/+])$ subCategoryList.php?category=$1 [END] 

如果收到一个HTTP状态500使用此规则时(内部服务器错误) ,那么很可能你正在使用一个非常旧的Apache服务器版本。在这种情况下,请尝试用[L]标志替换[END]标志,然后重试。

如果您决定使用动态配置文件(而不是真正的http服务器主机配置),那么您必须注意在主机配置中完全启用这些文件的解释。


而且一般提示:你应该总是喜欢将这种规则的HTTP服务器主机的配置里面,而不是使用动态配置文件(“的.htaccess”)的。这些文件出了名的错误,很难调试,他们真的放慢了服务器。它们仅作为最后一种选择,用于您无法控制主机配置的情况(阅读:真正便宜的托管服务提供商),或者您拥有依赖编写自己的重写规则的应用程序(这是一个明显的安全噩梦)。