我有一个网站 * https://www.example.com 。我想动态地打开home,category和sub-category,如:
https://www.example.com
https://www.example.com/education
https://www.example.com/education/PHP-Training
我已经像这样编写了index.php:
if(isset($_GET['category'])){
$category = $_GET['category'];
$subCategory = $_GET['subcategory'];
include('files/categoryFile.php');
}else{
include('files/indexFile.php');
}
categoryFile.php
将使用上述两个变量$category
,$subCategory
从数据库中获取数据,indexFile.php
是索引页面的静态文件。
以下是重写规则.htaccess
的代码:
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+) index.php?category=$1&subcategory=$2 [NC,L]
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?category=$1 [NC,L]
它在这里工作正常,但问题是,它还将https://www.example.com/css/style.css
重写为同一规则。我可以通过使用以下代码将.htaccess
文件拖放到此文件夹来阻止它重写这些特定文件夹:
<IfModule mod_rewrite.c>
#Disable rewriting
RewriteEngine Off
</IfModule>
但它对我来说似乎不是一个好的解决方案。我想知道是否有更好的解决方案。如果此问题与问题标准不符。请评论它,我将删除该问题。此外,如果可能有变化,建议编辑。感谢
答案 0 :(得分:1)
我在我的一个项目中做过这件事。您必须在重写规则之前添加一个条件,还有一个条件是您应该创建资产文件夹,这样您就可以存储所有公共文件和文件夹,并且可以使用一个规则公开。
根据您的示例检查此解决方案。
RewriteCond %{REQUEST_URI} !/css
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+) index.php?category=$1&subcategory=$2 [NC,L]
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?category=$1 [NC,L]
我认为你只需要添加几个条件来排除它们。
RewriteCond %{REQUEST_URI} !/css
RewriteCond %{REQUEST_URI} !/js
RewriteCond %{REQUEST_URI} !/images