我正在尝试使用 PHP/.htaccess 做另一个 SEO 系统...
我需要应用以下规则:
- 必须捕获所有不以扩展名结尾的 URL(www.foo.com --> catch | www.foo.com/catch-me --> catch | www.foo.com/dont-catch.me --> dont catch)。
- 必须捕获所有以 .php* (.php、.php4……) 结尾的 URL(这是规则 #1 的例外)。
- 所有规则只能在某些目录中应用,并且不是在它们的子目录中(到目前为止是 / 和 /framework)。
- 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]
第一条规则集:
- 如果设置了 GET 参数,则不要运行此规则
uri
(否则在附加参数后重定向到目标脚本时会出现循环uri
) - 如果 URI 包含
.
则跳过此规则集(您可能希望为特定扩展创建更具体的规则,但这种方法有效) - 如果 URI 位于受限目录下,则跳过此规则集
- 重定向到
index.php
(可能需要更改目标)并设置uri
GET 参数
第二条规则:
- 如果
uri
设置了参数,则跳过此规则集以防止循环 - 如果请求的 URI 以
.php
、.php4
或类似字符结尾,则继续(.php123
将不是被重定向) - 重定向到
index.php
(可能需要更改目标)并设置uri
GET 参数
并不需要“向导”来将 mod_rewrite 规则放在一起 - 花一些时间自己进行实验并阅读 jscott 推荐的指南。
做如果您想要很好的解释,请在这里提出所有理论类型的问题(而不是实际类型的问题,在实际类型的问题中,回答者似乎在众包您的项目而不是进一步了解您的知识)。