我正在尝试使用htaccess重写URL。背后的想法很简单:
一旦访问者访问
https://example.com/pineapples
,浏览器应加载https://example.com/index.php?page=pineapples
,同时保留原始URL。
仅当文件/pages/
中存在一个具有所请求URL名称的文件(在这种情况下为pineapples.php
)时,这种情况才会发生。
这也计入子目录:如果文件位于https://example.com/pineapples/flamingos
中,则https://example.com/index.php?page=pineapples/flamingos
应该重定向到/pages/
,在这种情况下为/pages/pineapples/flamingos.php
,其中pineapples
是子目录。
现在我已经尝试执行此操作,但这是非常多的错误。如上所述,它不适用于子目录,并且似乎适用于所有目录,而不仅仅是/pages/
。
Options -Indexes
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(css|js|jpg|png|gif|svg)$ [NC]
RewriteCond %{REQUEST_URI} !^/pages(/|$)
RewriteRule ^([^/]+/[^/]+/). /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [L,QSA]
如果有人可以帮助我解决这个问题,我将非常感激!
答案 0 :(得分:2)
已使用以下htaccess回答了该问题。
Options -Indexes +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !\.(css|js|jpg|png|gif|svg)$
RewriteRule ^(ajax|assets|auth)($|/) - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
答案 1 :(得分:1)
您无法检查possible_chars
,因为在您的情况下它必须位于>
所以您可能想尝试
REQUEST_FILENAME
我还启用了重写日志,因此,如果它不起作用,请将日志记录到您的获取中