需要有关 .htaccess URL 重写器的帮助

需要有关 .htaccess URL 重写器的帮助

我正在尝试使用 PHP/.htaccess 做另一个 SEO 系统...

我需要应用以下规则:

  1. 必须捕获所有不以扩展名结尾的 URL(www.foo.com --> catch | www.foo.com/catch-me --> catch | www.foo.com/dont-catch.me --> dont catch)。
  2. 必须捕获所有以 .php* (.php、.php4……) 结尾的 URL(这是规则 #1 的例外)。
  3. 所有规则只能在某些目录中应用,并且不是在它们的子目录中(到目前为止是 / 和 /framework)。
  4. htaccess 必须在 GET 值中发送输入的 URL,以便我可以在 PHP 中使用它。

有哪位 mod-rewrite 向导可以帮助我吗?

编辑:

好的,在阅读了建议的帖子后,我想到了这个,但我认为它陷入了循环...有人可以帮忙吗?

<IfModule mod_rewrite.c>
RewriteEngine On
# 1
RewriteCond %{REQUEST_FILENAME} !\.[^/]+$ [OR]
# 2
RewriteCond %{REQUEST_FILENAME} \.php.*$
# 4
RewriteRule ^(.*)$ http://localhost/seo-urls/seo-urls-mapper.php%3Frequested=$1?%{QUERY_STRING}
</IfModule>

因为我想在圣诞节假期期间完成这件事,所以我增加了悬赏:)感谢您的帮助,节日快乐!

答案1

尝试以此作为起点:

RewriteEngine On

RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI}  !\.(.*)
RewriteCond %{REQUEST_URI}  !^/(framework|restricted)/
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]

RewriteCond %{QUERY_STRING} !^uri
RewriteCond %{REQUEST_URI}  \.php.?$
RewriteRule .* /index.php?uri=%{REQUEST_URI} [L,QSA]

第一条规则集:

  1. 如果设置了 GET 参数,则不要运行此规则uri(否则在附加参数后重定向到目标脚本时会出现循环uri
  2. 如果 URI 包含.则跳过此规则集(您可能希望为特定扩展创建更具体的规则,但这种方法有效)
  3. 如果 URI 位于受限目录下,则跳过此规则集
  4. 重定向到index.php(可能需要更改目标)并设置uriGET 参数

第二条规则:

  1. 如果uri设置了参数,则跳过此规则集以防止循环
  2. 如果请求的 URI 以.php.php4或类似字符结尾,则继续(.php123不是被重定向)
  3. 重定向到index.php(可能需要更改目标)并设置uriGET 参数

并不需要“向导”来将 mod_rewrite 规则放在一起 - 花一些时间自己进行实验并阅读 jscott 推荐的指南。

如果您想要很好的解释,请在这里提出所有理论类型的问题(而不是实际类型的问题,在实际类型的问题中,回答者似乎在众包您的项目而不是进一步了解您的知识)。

相关内容