如何只重写特定的URL而不影响其他文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何只重写特定的URL而不影响其他文件相关的知识,希望对你有一定的参考价值。

我正在尝试在网上商店重写网址,因此网页没有文件扩展名,网址会在网址中显示产品所属的类别。

我已经修复了类别部分,所以我的网址现在看起来像这样:

http://webshop.nl/douche/douche-2.html

但我希望它看起来像这样:

http://webshop.nl/douche/douche-2

我尝试了以下行:

RewriteRule         ^(.*)/(.*) product-page.php?cat=$1&alias=$2 [QSA,L]

但是这会将所有文件重写为product-page.php,包括css / js / html文件。我可以以某种方式排除那些或仅将产品线应用于产品吗?

如果有帮助,我就可以通过alias获取productinfo:

$artikel = '
SELECT cnt.id, cnt.title as content_title, cnt.alias as content_alias, cnt.catid, cnt.images, cnt.state, cnt.introtext, cat.id, cat.title as cat_title, cat.alias as cat_alias,
MAX(case when f.field_id = 4 then f.value end) as prijs,
MAX(case when f.field_id = 5 then f.value end) as prijsoud,
MAX(case when f.field_id = 6 then f.value end) as specificaties
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
JOIN snm_categories cat
ON cnt.catid = cat.id
WHERE cnt.alias = "'.$conn->real_escape_string($_GET['alias']).'"
AND cnt.state = 1
GROUP BY f.item_id';
$artikelcon = $conn->query($artikel);
$artikel = $artikelcon->fetch_assoc();
答案

您可以使用此规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([w-]+)/([w-]+)/?$ product-page.php?cat=$1&alias=$2 [QSA,L]
  • RewriteCond确保仅为非文件和非目录重写它
  • 最好在正则表达式中使用[w-]+而不是.*,以避免将URL与点字符匹配。

以上是关于如何只重写特定的URL而不影响其他文件的主要内容,如果未能解决你的问题,请参考以下文章

如何模拟特定功能而不影响同一个ES6类中的其他功能?

从子域重写而不更改 url

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

HTACCESS 重写:忽略语言代码并将 index.php 添加到 url 而不更改它

如何在 asp.net 中将 URL 重写为子域而不实际在服务器上创建子域

如何通过 IP 限制对特定重写的访问