为新的永久更改 .htaccess link

Change .htaccess for new permanent link

我有一个这样的页面link:www.mysite/lab/index.php?pagina=blablabla

我使用 .htaccess 设置:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([A-Za-Z0-9]+)$ ./index.php?pagina= [QSA,L]

如果我继续 www.mysite/lab/blablabla 我看不到我的页面,但我有错误 page not found

我在 www.mysite/lab/ 和其他 3 个文件夹中有页面,我可以在 .htaccess 中使用 ELSE IF 吗?

您的重写规则采用整个请求路径并将其用作 </code> 的参数。您只需要捕获最后一个斜杠右边的内容,而不是整个路径。</p> <pre><code>RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule /lab/([A-Za-z0-9]+)$ index.php?pagina= [QSA,L]

您还可以使用 RewriteBase 指定重写的基础,这实际上允许您跳过 /lab/ 部分。

RewriteEngine On
RewriteBase /lab/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ([A-Za-z0-9]+)$ index.php?pagina= [QSA,L]

您拒绝了正则表达式中的 /。您要么需要按照 holodoc 所说的进行操作,要么将正则表达式修改为

^([A-Za-Z0-9/]+)$

因为您只需要一个 htaccess 来处理您所有相关的文件夹,您可以将这段代码放在您的 htaccess 中(它必须在根文件夹中)

RewriteEngine On
RewriteBase /mysite/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(lab|blog|faq|presentazione|feed|editori)/([^/]+)$ /index.php?pagina= [L]