我有一个问题重写文件路径到一个文件与查询字符串
我想取一个url,看起来像这样:
https:url.com/products/1_Samsung_Galaxy
和重写请求到我的服务器如下:
https:url.com/model.php?id=1&title=Samsung_Galaxy
我的htaccess是这样的:
RewriteEngine On
#rewrite no ending files to .php if file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !products/
RewriteRule ^([^.]+)$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/products/([1-9]+)(.*)$ model.php?id=$1&title=$2 [NC,L]
与当前配置,请求将文件在同一目录model.php称为products.php,但似乎在不同的目录,因为一些脚本文件中引用与相对路径products.php抛出错误,它们包含的对象不存在。
真的我的主要问题是,我不知道apache语法或它是如何工作的,我有麻烦找到一个资源,我可以了解apache。由于某些原因,apache文档没有多大帮助。如果有一个很好的资源来学习如何编写apache文件,我也很乐意去看看。
你的问题有点模糊,但我认为这是你正在寻找的:
RewriteEngine On
# rewrite /products/<id><slug> to /model.php/.....
RewriteRule ^/?products/(d+)(.*)$ /model.php?id=$1&title=$2 [L]
# rewrite to "...php" if such file exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
如果在http服务器的主机配置中实现,这些规则将有效。或者,如果您没有访问权限,可以在http主机的DOCUMENT_ROOT
文件夹中的分布式配置文件(".htaccess")中访问。
与您的尝试的主要区别:
- 目标路径写入绝对路径。这解决了请求被重写到不同文件夹的问题。
- 首先实现对/model.php的异常重写,因此在文件的更高层,因为规则是从上到下处理的。这节省了一些条件。
您还提到您"不熟悉apache语法";和有困难找到资源学习。
我总是推荐使用apache模块的官方文档。它们质量上乘,并附有很好的示例:
https://httpd.apache.org/docs/current/mod/mod_rewrite.html