htaccess-将网址从/ test重写为index.php?page = test

时间:2019-08-09 17:42:40

标签: .htaccess

我正在尝试使用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]

如果有人可以帮助我解决这个问题,我将非常感激!

2 个答案:

答案 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

我还启用了重写日志,因此,如果它不起作用,请将日志记录到您的获取中