清理子文件夹中的 URL

Clean URLs in a subfolder

我已阅读并遵循指南并寻找其他人问题的答案,但我在 url 重写和 htaccess 方面苦苦挣扎。

我的网站上有一个子文件夹,其中有一个索引页,用于处理查询字符串以显示动态内容。我希望变量看起来像是一个子文件夹名称,例如

http://mywebsite.com/subfolder/index.php?v=variable

http://mywebsite.com/subfolder/variable

我制作的 .htaccess 文件位于 http://mywebsite.com/subfolder/,即与 index.php

相同的文件夹

我怎样才能让它工作?非常感谢任何帮助。

在你的.htaccess中使用这个:

RewriteEngine On
RewriteCond %{QUERY_STRING} v=(.+)$ [NC]
RewriteRule ^ subfolder/%1? [R=301,L,NE]

这使用 %{QUERY_STRING} 获取变量,然后使用 %1 将其附加到重写。您会看到我在重写的末尾添加了 ?。那就是阻止原始查询出现在 URL.

的末尾

我使用了 R=301,这是一个永久重定向。您可能希望在测试时将其更改为 R=302,因为这是临时的。

您可以在此处查看此规则的测试:https://htaccess.madewithlove.be?share=7b6832e9-2c05-5d1d-916c-e4dd0f5b1da6

确保在测试之前清除缓存。

您可以在 /subfolder/.htaccess

中使用这些规则
RewriteEngine On
RewriteBase /subfolder/

RewriteCond %{THE_REQUEST} \s/subfolder/index\.php\?v=([^&\s]+) [NC]
RewriteRule ^ %1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index.php?v= [L]

更新(传递两个值)

RewriteEngine On
RewriteBase /subfolder/

RewriteCond %{THE_REQUEST} \s/subfolder/index\.php\?v=([^&\s]+)&v2=([^&\s]+)\s [NC]
RewriteRule ^ %1/%2? [R=301,L]

RewriteCond %{THE_REQUEST} \s/subfolder/index\.php\?v=([^&\s]+)\s [NC]
RewriteRule ^ %1? [R=301,L]

# Don't touch to existing files/folders
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# Rewrite /xxx to /index.php?v=xxx
RewriteRule ^([^/]+)$ index.php?v= [L]

# Rewrite /xxx/yyy to /index.php?v=xxx&v2=yyy
RewriteRule ^([^/]+)/([^/]+)$ index.php?v=&v2= [L]