用户友好网址应该被添加,例如:
http://example.com/some-category/some-file
我继承的文件夹结构是pascal,因此重写的网址应如下所示:
http://example.com/SomeCategory/SomeFile.php
注意:类别或文件名中的字词数量会有所不同,因此不要期望以这种方式保持一致性。恩。 http://example.com/some-long-category/file
。
我想知道如何使用Apache的 mod_rewrite 为任何类别和文件创建一般的重写条件 - 规则对。
您可以测试您的规则here,而无需设置Apache服务器。
答案 0 :(得分:1)
请注意,问题已经更新,因为这个答案是写的,并且最初没有说明它不是一致的格式 - 这个答案涵盖了单词/单词
此部分需要位于主服务器配置中,位于根级别或<VirtualHost>
:
RewriteEngine on
RewriteMap uc int:toupper
然后在.htaccess
:
RewriteEngine on
RewriteRule ([a-z])([a-z]*)-([a-z])([a-z]*)/([a-z])([a-z]*)-([a-z])([a-z]*) %{uc:$1}$2%{uc:$3}$4/%{uc:$5}$6%{uc:$7}$8.php
我认为重写引擎不需要在第一个引入,但已经确定了。我会把测试留给你。我做了足够多的工作!无论如何都不能在那里进行测试,因为它需要设置第一部分。
它将重定向四个单词位置中任意一个的单个字母。假设所有都是相同的格式,两个单词使用a到z只用一个连字符分隔。
如果您无法访问主服务器配置,那么我建议您运行一个脚本来重命名您的文件,使名称至少为小写。如果没有RewriteMap
,则无法进入主配置。
价:
答案 1 :(得分:1)
我决定为更新的问题添加另一个答案是最有意义的,因为我的原始答案可能对某人有用,并且是最初陈述的问题的有效方法。
根据我的理解,mod_rewrite循环直到URL没有被改变,所以我们应该能够使用它来循环直到每个单词都被改变。这是代码。
此部分需要位于主服务器配置中,位于根级别或<VirtualHost>
:
RewriteEngine on
RewriteMap uc int:toupper
然后在.htaccess
:
RewriteEngine on
RewriteRule (.*)(?:^|-|(/))([a-z])([a-z]*)(?![a-z])(.*?)(?:\.php)?$ $1$2${uc:$3}$4$5.php
应该这样做。请尝试一下,让我知道结果。
正如在评论中发现的那样,默认限制为10次迭代,这意味着10个字的限制。如果您需要匹配十个以上的单词,则可以根据需要增加LimitInternalRecursion
指令。
注意:下面的许多评论主要涉及测试和调整,直到它起作用为止。虽然后来发现裸目录也需要匹配。另一天的问题,也许是另一个问题!